c 交換類排序演算法(氣泡排序 快速排序)

2021-10-23 10:37:39 字數 1524 閱讀 3982

氣泡排序(bubble sort)也是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。

演算法步驟:

1)比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

2)對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。

3)針對所有的元素重複以上的步驟,除了最後乙個。

4)持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

複雜度分析

氣泡排序對 n 個元素需要o(n^2)的比較次數,且可以原地排序,無需輔助空間。

氣泡排序僅適用於對於含有較少元素的數列進行排序。

最差時間複雜度 o(n^2)

平均時間複雜度 o(n^2)

最優時間複雜度 o(n)

最差空間複雜度 o(n),輔助空間 o(1)

特點分析:穩定演算法(stable)、in place演算法

void bibble_sort(vector& a, int n)

} }

}int main()

; int n = data.size();

//si_sort(data,n);

//shell_sort(data,n);

bibble_sort(data,n);

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

return 0;

}

原理: 每次選乙個軸pivot(我選陣列的第乙個元素arr[p]),遍歷其餘陣列元素使得比arr[p]大的數都在arr[p]的右邊,比arr[p]小的數都在arr[p]的左邊,然後遞迴處理arr[p]的左邊和arr[p]的右邊。

注意:

int  quick_sort(vector& a, int low,int high);

void quicksort(vector& a, int low, int high)

}int quick_sort(vector& a, int low,int high)

a[low] = a[high];

while(lowdata;

int n = data.size();

//si_sort(data,n);

//shell_sort(data,n);

//bibble_sort(data,n);

quicksort(data,0,n-1);

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

return 0;

}

排序演算法 三 交換類排序 氣泡排序和快速排序

交換類排序的基本思想 通過一系列交換逆序元素進行排序的方法。氣泡排序 氣泡排序的基本思想 顧名思義就是像冒泡一樣,兩兩比較,將大值 小值 後移,最後最大值或最小值排到最後。優化 資料是有序的,在遍歷一次時沒有交換資料,所以資料是有限的,可以設定乙個標記為flag 氣泡排序優化,定義乙個標誌器,voi...

快速排序 氣泡排序 交換類排序 講解

每一趟排序選擇當前序列中的第乙個關鍵字 通常是第乙個 作為樞紐,而快速排序要做的就是把比樞紐小的關鍵字交換到樞紐前面,比樞紐大的關鍵字交換到樞紐後面。本趟排序完後會生成新的子串行,而子串行會成為下一趟排序的初始序列。通過例子來講明快速排序的規則 總結而言就是 首為樞紐,左i右j,先j後i,j從右向左...

排序演算法 交換排序(氣泡排序 快速排序)

交換排序 利用交換資料元素位置的方法進行排序的方法 基本思想 將序列中第乙個記錄與第二個記錄比較,若前乙個大於後乙個,則交換位置。然後比較第二個和第三個,第三個和第四個,以此類推,一輪之後,序列中最大的元素就到了序列最後的位置上。繼續進行第2輪,第3輪,第n 1輪。若其中某一輪途中沒有元素交換,則證...