資料結構 經典排序演算法總結(二)
阿新 • • 發佈:2021-01-21
資料結構 經典排序演算法總結(二)
交換排序
氣泡排序
氣泡排序:是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端。
思想:對所有相鄰記錄的關鍵字值進行比效,如果是逆順(a[j]>a[j+1]),則將其交換,最終達到有序化;
適用情況:資料量少且不考慮效率
時間複雜度和穩定性:O(n)~O(n2) 穩定
1、比較相鄰的元素。如果第一個比第二個大,就交換它們兩個;
2、對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數;
3、針對所有的元素重複以上的步驟,除了最後一個;
4、重複步驟1~3,直到排序完成。
程式碼實現:(優化兩次後的氣泡排序)
void BubbleSort(int* arr, int size)
{
int n = size - 1;
//用於記錄每輪冒泡最後交換的位置,優化。
int pos = 0;
for (int i = 0; i < size; ++i)
{
//用於標記該輪冒泡是否有資料交換 優化
bool flag = false;
for (int j = 0; j < n; ++j)
{
if (arr[j] > arr[j + 1])
{
Swap(arr, j, j + 1);
flag = true;
//最後一次交換位置,下輪冒泡時後面就不用遍歷了。
pos = j;
}
}
if (flag != true)
{
//元素未交換,說明已有序,退出
break;
}
n = pos;
}
}
執行結果:
快速排序(重要)
由於篇幅和重要性的問題,博主將快速排序單獨寫在一篇部落格中 資料結構 快速排序的三種實現 (hoare版本 挖坑法 前後指標版本)