快速排序演算法是現在用的最廣的排序演算法,也是效率最高的。它有兩種實現方式,一種是定軸法,另外一種是挖坑法。這裡簡單介紹一下兩種實現方法的思想,並附上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...
快速排序的兩種實現方式
從小 大排序 以首位元素作為基準元素 在起始位置小於結束位置的前提下,先從右到左迴圈陣列元素,如果大於基準元素,則向左移動結束位置的索引,當不滿足迴圈條件的時候,將索引是高位的元素賦予索引為低位的元素 也就是首位元素所在的地方 然後從左到右迴圈陣列元素,如果小於基準元素,則向右移動開始位置的索引,當...