幾種比較常見的排序演算法
第一種:
/*函式功能:雙向氣泡排序
2013.7.8
時間複雜度o(n^2)
*/#include
void mp(int *array,int n)
}if(mmax==0) // 沒有記錄交換,掃瞄結束
break;
bmax=mmax;
for(i=bmax-1;i>bmin;i--) //此次掃瞄使輕氣泡上浮
}if(mmin==0) // 本次沒有記錄交換,掃瞄結束
break;
bmin=mmin;}}
int main()
;int i;
mp(array,9);
for(i=0;i<9;i++)
return 0;
}第二種:
/*快速排序*/ o(n㏒2n)
#include
#include
/*函式功能:快速排序的分劃演算法;
函式返回值:劃分元素的陣列下標
*/int x[50],n,*p;
int part(int *a,int i,int j)
;void restore(int *array,int i,int n);
void heapsort(int *array,int n) // 堆排序演算法
for(i=n-1;i>0;i--)
}void restore(int *array,int i,int n) //重建堆
}*(array+j/2)=r;
}int main()
第四種: n㏒2n
歸併排序:歸併排序是利用分治法來對序列進行排序的,該演算法就是不斷地將待排序的陣列一分為二,當子陣列的元素少於2個時這種分解的過程就會停止,
然後再將多個已排好序的子串行合併為乙個新的有序序列。
#include
/*引數1,待排陣列,引數2,輔助陣列,引數3,每個子串行的長度,引數4,待排陣列長度
*/void mergepass(int *a,int *b,int t,int n)
else
}while(i<=end1)
while(j<=end2)
beg1=end2+1;
}for(i=beg1;i*(b+index)=*(a+i);}/*
函式功能:對無序序列進行歸併排序
函式引數:引數1,待排序陣列;引數2,輔助陣列;引數3,陣列元素個數
*/void mergesort(int *a,int *b,int n)
}int main()
;int y[5];
int i;
printf("原陣列為:");
for(i=0;i<5;i++)
printf("%d ",*(a+i));
printf("\n排序過程如下\n");
mergesort(a,y,5);
for(i=0;i<5;i++)
printf("%d ",*(a+i));
printf("\n");
}
幾種排序演算法
本帖依據學習進度持續更新 資料結構與演算法分析 c語言描述 學到第七章,是時候該系統的學習一下排序演算法了。首先學到的是插入排序,演算法就不贅述了,書上部落格上到處都有。書上的兩個定理還不太明白 插入排序 定理7.1 n個互異數的陣列的平均逆序數是n n 1 4。定理7.2 通過交換相鄰元素進行排序...
幾種排序演算法
最近一直在複習演算法,在經歷了四次面試之後,還沒有找到適合自己的工作 暫時歇一歇,準備冬天去北京創業一條街吹泡泡去。在面試過程中主要提及的就是對於排序演算法的疑問 主要針對以下幾種排序演算法 1,氣泡排序 2,插入排序 3,選擇排序 4,希爾排序 5,歸併排序 6,快速排序 7,堆排序 對於基數排序...
幾種排序演算法
插入排序 void sort int a,inta size a j key printf n print a,a size 插入排序的設計思想就是按照從陣列a 1 開始 當然也可以從0開始只不過從0開始會多加乙個判斷得不償失 每次迴圈所要加入的元素,如果大於前乙個元素,就直接加入,否則就將將前面已...