幾種簡單的排序演算法

2021-07-06 04:22:50 字數 1127 閱讀 4830

整理了一下幾種簡單的排序演算法,暫時先貼上演算法,以後有時間在乙個乙個注釋

參考:下面是**部分:

#include //演算法1:氣泡排序,時間複雜度o(n^2)

//基本思想:從最後乙個數開始,每次相鄰兩個數字比較,較小數往上浮動

void bubblesort(int *a,int c)

} }}//演算法2:選擇排序,時間複雜度o(n^2)

//基本思想:每次選出一最小的數放在前面,依次類推

void selectsort(int *a,int c)

temp=a[i];

a[i]=a[key];

a[key]=temp; }}

//演算法3:插入排序,時間複雜度o(n^2)

//基本思想:假設該陣列前n-1個是排好的,將第n個插入已排好的佇列中

void insertsort(int *a,int c) }}

//演算法4:希爾排序

//基本思想:插入排序的改進,按增量d分組插入排序,最後乙個增量為1

void shellsort(int *a,int c)

a[i]=key;

quicksort(a,left,i-1);

quicksort(a,i+1,right);

}//演算法6:堆排序

//基本思想:先構建大頂堆,將根結點和最後乙個元素交換,一直迴圈到根節點

void heapadjust(int *a,int p,int c)

}void heapsort(int *a,int c)}

//演算法7:歸併排序

//基本思想:先分割,排序後歸併

void merge(int *a,int *b,int start,int middle,int end)

while(i<=m)

b[k++]=a[i++];

while(j<=n)

b[k++]=a[j++];

for(i=start,k=0;i<=end;i++)

a[i]=b[k++];

}void mergesort(int *a,int *b,int start,int end)

{ int middle=(start+end)/2;//分割點

if(start

幾種簡單的排序演算法

1 插入排序 直接插入排序 希爾排序 2 交換排序 氣泡排序 快速排序 3 選擇排序 直接選擇排序 堆排序 4 歸併排序 5 分配排序 基數排序 所需輔助空間最多 歸併排序 所需輔助空間最少 堆排序 平均速度最快 快速排序 不穩定 快速排序,希爾排序,堆排序。1.直接插入排序 1 基本思想 在要排序...

回顧幾種簡單的排序演算法

第一次寫部落格希望能寫的好一點把 回顧了一下幾種經典的排序演算法 氣泡排序 選擇排序 快速排序 插入排序。氣泡排序是一種簡單的排序演算法,它通過從前往後比較相鄰元素,使得較大的數向後 冒 每一趟可以確定乙個最大的數。相當於在末尾不斷排乙個反向的降序序列。從前往後比較相鄰的元素,如果前乙個元素比後乙個...

幾種簡單的排序演算法總結

注 1 以下所有排序演算法均按照從小到大的順序排列 2 以下演算法中用到的交換函式都一樣,如下 void swap int a,int i,int j 因此不在每個排序演算法中進行詳解 1.氣泡排序 1.最簡單的氣泡排序 思想 該排序演算法在排序的過程中總共進行n 1趟排序,每一趟排序都將當前的關鍵...