排序演算法
平均時間複雜度最好情況最壞情況空間複雜度穩定性
氣泡排序
o(n²)
o(n)
o(n²)
o(1)
穩定選擇排序
o(n²)
o(n²)
o(n²)
o(1)
不穩定插入排序
o(n²)
o(n)
o(n²)
o(1)
穩定希爾排序
o(nlogn)
o(o(n²)
o(1)
不穩定歸併排序
o(nlogn)
o(nlogn)
o(nlogn)
o(n + logn)
穩定快速排序
o(nlogn)
o(nlogn)
o(n²)
o(logn)
不穩定堆排序
o(nlogn)
o(nlogn)
o(nlogn)
o(1)
不穩定桶排序
o(n + k)
o(n + k)
o(n²)
o(n + k)
穩定計數排序
o(n + k)
o(n + k)
o(n + k)
o(k)
穩定基數排序
o(n × m)
o(n × m)
o(n × m)
o(n + m)
穩定
#include #include #include using namespace std;
void bubblesort(vector&q)
}if(!flag)
break;
}}int main()
bubblesort(q);
for(auto x : q)
cout << x << ' ';
cout << endl;
return 0;
}
#include #include #include using namespace std;
void selectionsort(vector&q)
}}int main()
selectionsort(q);
for(auto x : q)
cout << x << ' ';
cout << endl;
return 0;
}
#include #include #include using namespace std;
void insertionsort(vector&q)
q[j+1] = t;
}}int main()
insertionsort(q);
for(auto x : q)
cout << x << ' ';
cout << endl;
return 0;
}
#include #include #include using namespace std;
void shellsort(vector&q)
q[j+gap] = t;
}gap /= 2;
}}int main()
shellsort(q);
for(auto x : q)
cout << x << ' ';
cout << endl;
return 0;
}
#include #include #include using namespace std;
void mergesort(vector&q, int l, int r)
while(i <= mid)
w.push_back(q[i++]);
while(j <= mid)
w.push_back(q[j++]);
for(int i : w)
q[l++] = i;
}int main()
mergesort(q, 0, n - 1);
for(auto x : q)
cout << x << ' ';
cout << endl;
return 0;
}
#include #include #include #include using namespace std;
void quicksort(vector&q, int l, int r)
}}int main()
quicksort(q, 0, n - 1);
for(auto x : q)
cout << x << ' ';
cout << endl;
return 0;
}
桶排序的思想是我們首先要知道所有待排序的數的資料範圍,知道裡面的最大值和最小值各是多少。然後利用最大值和最小值分成若干個桶(資料區間),將所有待排序的數按照其大小分到這些桶(資料區間)中。在每個桶中分別利用排序演算法進行排序,這樣就完成了所有資料的排序。#include #include #include #include #include using namespace std;
void push_down(vector& heap, int size, int u)
}void push_up(vector& heap, int u)
}void heapsort(vector&q, int n)
}int main()
這裡設所有待排序的數的範圍是從0~100的。
這裡設所有待排序的數都不超過三位數,也就是說不超過999。#include #include #include #include #include using namespace std;
void countingsort(vector&q, int n)
}}int main()
countingsort(q, n);
for(auto x : q)
cout << x << ' ';
cout << endl;
return 0;
}
十大排序演算法 C 實現
include stdafx.h include include include using namespace std 1氣泡排序 void bubblesort vector int v 2選擇排序 void seletionsort vector int v 3插入排序 void insert...
十大排序演算法(c )
1.氣泡排序 每一輪都從頭開始比較,比較當前數與後一位數,若當前數大於後一位數則進行交換,每一輪都會在末尾得到一位排序正確的數,因此每一輪比較結束,下一輪的比較範圍將縮小 ja j 1 if ischange break 2.插入排序 每一輪將當前數 a i 插入到前面已經排序好的合適位置,因此關鍵...
十大排序演算法(C )
原理 比較相鄰兩個元素,如果前乙個比後乙個大則交換二者位置 以公升序為例 每進行一輪比較則可以把最大的元素放到相對最後的位置。每進行一輪比較就會有乙個元素變為有序。迴圈對每輪越來越少的元素進行比較則最終變為有序序列。如果序列元素初始時為有序,則一輪則可進行排序完畢,最好時間複雜度為o n 如果序列元...