常用排序演算法總結

2021-09-08 10:48:30 字數 1997 閱讀 8727

氣泡排序

時間複雜度:o(n²)

原理:從陣列的第個位置開始兩兩比較array[index]和array[index+1],如果array[index]大於array[index+1]則交換array[index]和array[index+1]的位置,直到陣列結束。

void bubble(int array, int

size)

}}

二、選擇排序

時間複雜度:o(n^2),與氣泡排序相比減少了陣列交換的次數

原理:選擇個 array[0]作為標桿,然後迴圈找到除這個外最小的 (查詢小於標桿的最小 ),交換這兩個,這時最小就被放到了array[0]上,然後再將array[1]作為標桿,從剩下未排序的 中找到最小 ,並交換。

void sort(int array, int

size)

}if(i!=k)

}}

三、插入排序

時間複雜度:插入排序對隨即順序的序列的時間複雜度也為o(n^2),但是對於基本有序的序列進行排序時間複雜度為o(n)

適用:一般不用在資料大於1000的場合或者重複排序超過200資料項的序列使用插入排序

原理:插入排序的思想是陣列是部門有序的,然後將無序的部分迴圈插入到已有序的序列中。

void insertsort(int array, int

size)

array[j+1]=temp;

}}

四、希爾排序/縮小增量排序

時間複雜度:n的1.2次冪

適用:適合於資料量在5000以下並且速度並不是特別重要的場合。

原理:先將整個待排元素序列分割成若干個子串行(由相隔某個「增量」的元素組成的)分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次直接插入排序。因為直接插入排序在元素基本有序的情況下(接近最好情況),效率是很高的,因此希爾排序在時間效率上比前兩種方法有較大提高。

void shellsort(int array, int

size)

array[j+increment]=temp;}}

while(increment>1

);}

五、堆排序

時間複雜度:o(n*logn)

適用:適合於資料量非常大的場合(百萬資料)

原理:利用大頂堆(小頂堆)堆頂記錄的是最大關鍵字(最小關鍵字)這一特性,使得每次從無序中選擇最大記錄(最小記錄)變得簡單。

其基本思想為(大頂堆):

1)將初始待排序關鍵字序列(r1,r2....rn)構建成大頂堆,此堆為初始的無須區;

2)將堆頂元素r[1]與最後乙個元素r[n]交換,此時得到新的無序區(r1,r2,......rn-1)和新的有序區(rn),且滿足r[1,2...n-1]<=r[n];

3)由於交換後新的堆頂r[1]可能違反堆的性質,因此需要對當前無序區(r1,r2,......rn-1)調整為新堆,然後再次將r[1]與無序區最後乙個元素交換,得到新的無序區(r1,r2....rn-2)和新的有序區(rn-1,rn)。不斷重複此過程直到有序區的元素個數為n-1,則整個排序過程完成。

//

array是待調整的堆陣列,i是待調整的陣列元素的位置,nlength是陣列的長度

//本函式功能是:根據陣列array構建大根堆

void heapadjust(int array,int i,int

nlength)

else

break; //

否則退出迴圈}}

//堆排序演算法

void heapsort(int array,int

length)

}

常用排序演算法總結

總結些常見的排序演算法,方便以後可以重用。資料量不大,為了表達方便就直接使用了陣列。int data null data new int 1.氣泡排序 氣泡排序,從小到大排序 for int i 0 i data.length i 氣泡排序就是說,排序的過程像水裡往上冒的氣泡一樣,每個數字代表乙個氣...

常用排序演算法總結

常用排序演算法總結 選擇排序 對於長度為n的陣列,選擇排序需要大約n2 2詞比較和n次交換。插入排序 對於隨機排列的長度為n且主鍵不重複的陣列 1 平均情況下,需要 n2 4次比較以及 n2 4次交換。2 最壞情況下,需要 n2 2次比較以及 n2 2次交換 3 最好情況下,需要n 1次比較以及0次...

常用排序演算法總結

注 所有排序都是寫的由小到大排序的情況 1.插入排序 1 直接插入排序 穩定 arr sortedindex 1 key 注意這裡的下標 sortedindex 1 2 希爾排序 不穩定 希爾排序好的增量序列的共同特徵 希爾排序演算法 fromid 1801475 type syn 最後乙個增量必須...