排序演算法之交換排序

2021-10-05 08:46:46 字數 2085 閱讀 6799

交換排序有:氣泡排序和快速排序

演算法思想:

冒泡遍歷所有的資料,每次對相鄰元素進行兩兩比較,如果順序和預定規定的順序不一致,則進行位置交換;這樣依次遍歷會將最大或最小的資料上浮到頂端,之後對於其他元素重複相同的操作,直到所有的資料有序。

即:如果要公升序排序的話,就每次兩兩比較,將較大的元素交換到後面,這樣每一輪都會選擇乙個元素放到它規定的位置。

#include

using

namespace std;

void

bubblesort

(int a,

int n)}}

}int

main()

;bubblesort

(a,10);

for(

auto e : a)

cout << endl;

return0;

}

對於氣泡排序有個可以改進的點:如果有一輪遍歷沒有交換任何元素,則說明已經有序。

快速排序的基本做法是:選擇乙個基準元素,比這個元素小的都放在基準元素的前面,大的都放在基準元素的後面,進行分隔開。這樣每次都使基準元素這乙個元素有序,再將他的左半區和右半區分別遞迴進行同樣的操作,一直到分割槽中只有乙個元素的時候,這樣就能保證公升序排好了。

綜上所述,基本步驟需要三步:

從序列中選擇乙個元素作為基準(index);

分割槽(partition),將比基準大的放到基準元素的後面,比基準元素小的放在基準元素的前面;

遞迴的對左右分區分別進行操作。

#include

using

namespace std;

void

swap

(int

* a,

int* b)

//分割槽

intpartition

(int a,

int low,

int high)

swap

(&a[low]

,&a[high]);

//找出後面比a[index]小的元素

while

(low < high && a[high]

>= a[index]

)swap

(&a[low]

,&a[high]);

}return low;

}void

quicksort

(int a,

int low,

int high)

}int

main()

;quicksort

(a,0,9

);for(

auto e : a)

cout << endl;

return0;

}

還有一種挖坑的方法,推薦使用

#include

using

namespace std;

//分割槽(採用挖坑法)

intpartition

(int a,

int low,

int high)

//此時a[high]的值賦給a[low],相當於a[high]現在是個坑

a[low]

= a[high]

;//從前往後找比index大的元素

while

(low < high && a[low]

<= index)

//填坑,新坑換成a[low]

a[high]

= a[low];}

//基準歸位

a[low]

= index;

return low;

}void

quicksort

(int a,

int low,

int high)

}int

main()

;quicksort

(a,0,9

);for(

auto e : a)

cout << endl;

return0;

}

排序演算法之交換排序

交換排基本思想 兩兩比較待排序元素的關鍵字,發現兩個元素的次序相反時即進行交換,知道沒有反序的元素為止。本節介紹兩種交換排序,即氣泡排序和快速排序。氣泡排序 每次只能和相鄰的位置數進行交換,效率低 include int a 100 void quicksort int left,int right...

排序演算法之交換排序

交換,就是根據序列中兩個元素關鍵字的比較結果來對換這兩個記錄在序列中的位置。基於交換的排序 演算法有很多。以氣泡排序和快速排序舉例。氣泡排序 public static int bubblesort int array return newarray 穩定性 氣泡排序是乙個穩定的排序方法。氣泡排序中...

排序演算法之交換排序

交換排序的思想是,比較兩個元素的大小,然後確定是否交換位置,主要分為兩種 氣泡排序,依次比較相鄰的兩個元素,把最值放在頭部或者尾部,接下來再用同樣的方法取最值放在頭部或尾部。如下 void bubblesort int a,int n 快速排序,首先設定乙個分界值,然後通過分界值,將陣列分成兩部分,...