比較常用的排序演算法總結

2021-10-10 09:28:25 字數 1822 閱讀 3977

常用的排序

氣泡排序

選擇排序

插入排序

桶排序希爾排序

歸併排序

快速排序

基數排序

堆排序

第一 氣泡排序

由於簡單直接上**

for

(int i=

1;i<=n;i++

)}

第二 選擇排序

每次找到陣列中最大或最小的數,將他與前面的數交換

for

(int i=

1;i)swap

(a[i]

,a[der]);

//交換

}}

第三 插入排序

從當前位置向前看,如果前面的數比他大,就向後移,最後找到比他小的或者到陣列最開始,賦值給該位置

for

(int i=

1;i) a[j]

=temp;

}

第四 桶排序

按照道理,桶排序不能簡單地認為只是一種排序演算法,因為他的運用範圍很廣

原理:將數字作為他的下標,記錄該數字是否出現或者出現的次數(去重)

for

(int i=

1;i<=n;i++

) tong[a[i]]++

;//累計a[i]出現的次數

for(

int i=

1;i<=n;i++

)

第五 希爾排序

又稱為最小增量排序

關鍵思想:分組思想

先取定乙個小於n的整數d作為第乙個增量,把錶的全部記錄分成d組

所有距離為d1的倍數的記錄放在同一組中,在各組內進行直接插入排序

然後取第二個增量d2重複上述的分組和排序,直至增量d=1,即所有記錄放在同一組中進行直接插入排序為止

for

(gap = len /

2; gap >

0; gap /=2

) a[k + gap]

= temp;}}

}

第六 歸併排序

主要是用遞迴來實現,將乙個陣列分成左右兩個部分,對左右兩個部分分別排序,最後合併到乙個陣列內

void

merget_sort

(int l,

int r)

else

}while

(i<=mid) b[k++

]=a[i++];

while

(j>=mid+

1) b[k++

]=a[j--];

for(i=l;i<=r;i++

) a[i]

=b[i];}

}

第七 快速排序

快速排序是通過比較關鍵碼、交換記錄,

以某個記錄為界(該記錄稱為支點),將待排序列分成兩部分

一部分所有記錄的關鍵碼大於等於支點記錄的關鍵碼,另一部分所有記錄的關鍵碼小於支點記錄的關鍵碼

速度的快慢取決於關鍵字在陣列中的相對大小

void

qsort

(int l,

int r)

a[l]

= a[i]

; a[i]

= base;

qsort

(l,i-1)

;qsort

(i+1

,r);

}

後面兩個排序方法,由於篇幅問題,下次給出

常用排序演算法總結(2) 非比較排序演算法

主要有氣泡排序,選擇排序,插入排序,歸併排序,堆排序,快速排序等。在一定條件下,它們的時間複雜度可以達到o n 需要三個陣列 待排序陣列 int arr new int 輔助計數陣列 int help new int max min 1 該陣列大小為待排序陣列中的最大值減最小值 1 輸出陣列 int...

常用排序演算法比較

不穩定 選擇排序 selection sort o n2 快速排序 quicksort o nlogn 平均時間,o n2 最壞情況 對於大的 亂序串列一般認為是最快的已知排序 堆排序 heapsort o nlogn 希爾排序 shell sort o nlogn 基數排序 radix sort ...

常用演算法排序比較

先看圖 2.三種簡單排序演算法簡單,但是效率低下 高階排序在簡單排序基礎上優化,演算法複雜,換取的是效能提高,同時可能需要更多的輔助空間。3.快速排序和歸併排序都使用了分治和遞迴,所以面試時被問到的機會比較高,尤其是快速排序。4.從時間效能上看,快速排序是所有排序演算法中實際效能最好的,然而快速排序...