快速排序的兩種實現

2021-08-09 02:05:20 字數 1102 閱讀 8357

快速排序演算法是現在用的最廣的排序演算法,也是效率最高的。它有兩種實現方式,一種是定軸法,另外一種是挖坑法。這裡簡單介紹一下兩種實現方法的思想,並附上c++實現**。

(一)定軸法:

1.備份對軸(首記錄)

2.取兩個指標left和right,初始值分別是序列的第二個元素和最後乙個元素,並且left<=right

3.移動兩個指標

*從right所指的位置向左搜尋,找到第乙個小於軸的元素

*從left所指的位置向右搜尋,找到第乙個大於軸的元素

*找到後如果left

4.重複上述過程,知道left>right

5.把軸放到right的位置,並且將right位置的值放到第一位

6.分別將right位置左邊的和右邊的進行上述的遞迴

void quicksort(int* a,int first,int last)  

a[first]=a[right]; //因為right一定是停在從右到左第乙個小於first的數上,交換之後,

//依然能保證first值左邊的比first小,右邊的比first大

a[right]=pivot;

quicksort(a,first,right-1);

quicksort(a,left,last);

}

(二)挖坑法:

1.備份軸記錄

2.取兩個指標low和high,初始值就是序列的兩端下標,保證low<=high

3.移動兩個指標

*從high向左找到第乙個小於軸的元素, 放在low的位置

*從low向右找到第乙個大於軸的元素,放在high的位置

4.重複,直到low=high,

5.把軸放在low所指的位置

6.分別對low所指的位置的左邊和右邊進行上述的遞迴

c++實現**如下:

void quicksort(int s, int l, int r)

{ if(l= pivot)

high--;

if(low

兩種快速排序

快排是一種基於交換的排序,氣泡排序 兩兩相鄰作比較,逆序則交換 也是基於交換的排序,快排運用了二分法的思想,每次找乙個哨兵,比哨兵小的放一邊,大的放一邊,這是完成了一趟快排。冒泡 for int i 0 ia j 1 快排一 void quicksort int left,int right if ...

快速排序的兩種具體實現

這是快速排序的兩種思想,兩種 思想 include include int partition int a,int p,int r tmp a i 1 a i 1 a r a r tmp return i 1 void quicksort int a,int p,int r int main int...

快速排序的兩種實現方式

從小 大排序 以首位元素作為基準元素 在起始位置小於結束位置的前提下,先從右到左迴圈陣列元素,如果大於基準元素,則向左移動結束位置的索引,當不滿足迴圈條件的時候,將索引是高位的元素賦予索引為低位的元素 也就是首位元素所在的地方 然後從左到右迴圈陣列元素,如果小於基準元素,則向右移動開始位置的索引,當...