常用的排序
氣泡排序
選擇排序
插入排序
桶排序希爾排序
歸併排序
快速排序
基數排序
堆排序
第一 氣泡排序
由於簡單直接上**
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.從時間效能上看,快速排序是所有排序演算法中實際效能最好的,然而快速排序...