演算法 排序演算法第三講 交換排序

2021-08-03 20:12:30 字數 2357 閱讀 5167

前面我們介紹過了插入排序和選擇排序。

插入排序,鏈結戳這裡:

選擇排序,鏈結戳這裡:

本文我們學習交換排序。

交換排序分為氣泡排序和快速排序。

氣泡排序的基本思想相信大家都已經不陌生。依次比較相鄰的兩個數,將小數放在前面,大數放在後面。

**:

void bubblesort(int *a, size_t n)

}if (exchange == false)

--end;}}

測試:

int main()

; int sz = sizeof(a) / sizeof(a[0]);

bubblesort(a, sz);

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

cout

<< endl;

system("pause\n");

return

0;}

執行結果:

快速排序是面試中最常考的,這裡我們給出三種快速排序的方法。

(1)左右指標法:

基本思想:選出乙個key值,begin去查詢陣列中比key大的值,end去查詢陣列中比key小的值,遞迴子問題。可以知道的是,當陣列正好是逆序時,快排的效率最低,為了防止最壞的情況,我們採取三數取中法。

**:

//三數取中法

int getmidindex(int* a, int left, int right)

else

// left > mid right

}// 左右指標法

int partsort1(int* a, int left, int right)

while (begin

< end && a[end] >= key)

if (begin

< end)

swap(a[begin], a[end]);

}swap(a[begin], a[right]);

return

begin;

}

(2)挖坑法將a[right]賦值給key,右邊就成了乙個「坑」,再用left去找比key大的放到右邊的坑,用right找比key小的放到左邊的坑,當left和right相遇時,是key值的位置。

int partsort2(int *a, int

left, int

right)

a[right] = a[left];

while (left

< right && a[right] >= key)

a[left] = a[right];

}a[left] = key;

return left;

}

(3)前後指標法定義乙個prev在cur之前,若cur

int partsort3(int* a, int

left, int

right)

++cur;

}swap(a[++prev], a[right]);

return prev;

}

測試:

//遞迴解法

void quicksort(int *a, int left, int right)

if (left < right)

}//非遞迴

#include

void quicksortnonr(int* a, int left, int right)

while (!s.empty())

if (div + 1

< end)

}}int main()

; int sz = sizeof(a) / sizeof(a[0]);

quicksort(a,0,sz-1);

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

cout

<< endl;

system("pause\n");

return

0;}

執行結果:

排序演算法 交換排序

交換排序的基本思想 兩兩比較待排序元素的關鍵字,發現兩個元素的次序相反時則進行交換,直到沒有反序的元素為止。1.氣泡排序 交換排序 演算法 氣泡排序 bubble sort 輸入 待排序元素的陣列,待排序元素個數 輸出 原理 通過無序區中相鄰元素間關鍵字的比較和位置的交換,使關鍵字最小的元素如氣泡一...

排序演算法 交換排序

基本思想 在乙個待排序序列中,兩兩比較元素的排序碼,如果不滿足次序要求則進行交換,直到整個排序序列滿足要求。思想 對待排序序列從前向後,依次比較相鄰元素的排序碼,若發生逆序,則進行交換。實現 include void bubblesort int p,int n if flag 減少不必要的比較 r...

交換排序演算法

快速排序 為啥叫快速排序,因為速度快,效率高 1.先找乙個數作為基準。作為基準的這個數,一趟排下來,左邊的數必小於它,右邊的數必大於它,也就是說,它找到了自己的位置。2.將兩個指標i,j分別指向表的起始 基準 和最後的位置。3.比較j指標的數字是否小於基準,j 直到j小於基準,交換位置 4.比較i指...