幾種排序演算法

2021-06-15 09:12:48 字數 1580 閱讀 7436

幾種比較常見的排序演算法

第一種:

/*函式功能:雙向氣泡排序

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開始會多加乙個判斷得不償失 每次迴圈所要加入的元素,如果大於前乙個元素,就直接加入,否則就將將前面已...