常用排序演算法總結

2022-04-29 20:33:10 字數 2426 閱讀 3159

目錄例題

插入排序

選擇排序

歸併排序

快速排序

無比較的排序

基數排序

stl參考題單:洛谷【演算法1-2】排序

update:2020/10/05 增加基數排序

兩個數比較大小,較大的數下沉,較小的數冒起來、

比較相鄰的兩個資料,如果第二個數小,就交換位置

從後向前兩兩比較,一直到比較最前兩個資料。最終最小數被交換到起始的位置

繼續重複上述過程,依次將第2.3...n-1個最小數排好位置

平均為\(o(n^2)\)

#includeusing namespace std;

int n;

int a[10010];

int main()

for(int i=1;i<=n;i++)

for(int i=1;i<=n;i++)

for(int i=1;i<=n;i++)

for(int i=1;i0;j--)

for(int i=1;i歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法的乙個非常典型的應用。

首先考慮下如何將2個有序數列合併。這個非常簡單,只要從比較2個數列的第乙個數,誰小就先取誰,取了後就在對應數列中刪除這個數。然後再進行比較,如果有數列為空,那直接將另乙個數列的資料依次取出即可。

平均為\(o(n\log)\)

void inversion(int *c,int l,int mid,int r)

while(i<=mid)

d[k++]=c[i++];

while(j<=r)

d[k++]=c[j++];

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

c[i]=d[i];

}void merge(int *c,int l,int r))\)

void quicksort(int a,int l,int r)

for(int i=1;i<=100;i++)

} return 0;

}

將整數按位數切割成不同的數字,然後按每個位數分別比較。

平均為\(o(n)\)

大大優化了桶排序的做法,空間複雜度更小

#include#define maxn 100010

using namespace std;

typedef long long ll;

int n,a[maxn];

int gmax(int a,int n)

return ma;

}void countsort(int a,int n,int exp);

for(int i=1;i<=n;i++)

for(int i=1;i<=9;i++)

for(int i=n;i>=1;i--)

for(int i=1;i<=n;i++)

}void radixsort()

}int main()

radixsort();

for(int i=1;i<=n;i++)

return 0;

}

sort函式用於c++中,對給定區間所有元素進行排序,預設為公升序,也可進行降序排序。sort函式進行排序的時間複雜度為\(o(\log_)\),比冒泡之類的排序演算法效率要高,sort函式包含在標頭檔案為#include的c++標準庫中。

#includeusing namespace std;

int n,a[110];

int main()

sort(a+1,a+n+1);//sort(a+1,a+n+1,greater())為逆序

for(int i=1;i<=n;i++)

return 0;

}

常用排序演算法總結

總結些常見的排序演算法,方便以後可以重用。資料量不大,為了表達方便就直接使用了陣列。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 最後乙個增量必須...