本文主要是敘述一次快速排序演算法中發生了哪些步驟,以加深對快速排序演算法的理解。
通過乙個參照數把整個數列分為大於它的部分和小於它的部分,再分別處理其兩邊的數列,直到結束。
1.首先從需要排序的數列中選取乙個參照點,如第乙個資料,即key=a[low]。
2.從數列最後一位開始與key進行比對(降序排列),如果小於key則比對下乙個,即high--(為了把比key大的挑出來)並把a[high]賦值給a[low](相當於high位空出來);
高位交換完成後同樣從低位找出比key小的,然後賦值。迴圈執行直到high=low。這個時候把key賦值給a[low](因為high第一次賦值把low位給佔了)。
3這樣一次while排序結束時low=high,以low為分界,左邊的全部都不小於a[low],右邊都不大於a[low]。
4.傳出此時low的值為pivotloc ,把陣列以pivotloc為分界化成兩段(即a[low - (pivotloc-1)] 和 a[pivotloc+1 - high])。
5.把剩下分為兩段的陣列再執行1-4的操作,遞迴執行。(注意遞迴操作時判斷語句要用if,不能用while。不然導致死迴圈)。
如降序排列時,有如下陣列:10,2,5,8,9,4,1,7 。關鍵數為10,那麼右邊所有的數都比它小。high-- 一直執行 ,直到high=low=0。本次排序函式沒有對數列做出變換,但是確定了low右邊所有的數都不大於它,接下來只需要對a[1-7]進行排序。因此把陣列分為a[low - (pivotloc-1)] 和 a[pivotloc+1 - high]兩段是必須的。
#includeint partition(int *a,int low,int high);
int qsort(int *a,int low,int high);
int main()
; qsort(a,0,9);
for(i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}int partition(int *a,int low,int high) //排序一次
a[low]=key;
return low;
}int qsort(int *a,int low,int high)
{ int pivotloc;
if(low
快速排序演算法的理解
快速排序演算法是一種基礎的演算法,主要用到分治和遞迴。這種演算法其實很有意思,有大佬叫它為填坑法。妙就妙在用填坑來形容了,真的是非常形象。從小到大排序為例的話,就是在乙個陣列中設定乙個比較值temp,將比temp值大的放temp的右邊,將比temp值小的放temp的左邊,快排的填坑形象的話,先在陣列...
關於快速排序演算法的理解
直接進入正題吧,快排演算法的思想主要是分兩步 1.使用空間複雜度為1的方法將一堆數中的某個元素找到自己的位置,並且保證左邊的數比自己小 大 右邊的數比自己大 小 2.將這個堆數左邊所有的數再次當做那堆數放到上面1的方法中,重複,直到代入的這堆數完全有序,完成之後再將將右邊所有的數當做那堆數放到上面的...
使用python理解快速排序演算法
快速排序是一種常用的優雅的排序演算法,快速排序使用的是 分而治之 的策略。具體 分而治之 策略這裡不作記錄。快速排序的原理就是,每次排序,我們選擇乙個基準值 然後把所有大於這個基準值 的值放到後面生成列表,把小於 等於 基準值 的值放到前面,生成乙個列表,然後使用遞迴將每一層問題逐級解決。假設有若干...