最近因為自已在做乙個小專案,深深的認識到自已的演算法真的是差極了,於是最近就開始看一點關於排序的演算法開始入門。首先第一種就是快速排序,快速排序起名就是源於它比較快的就能得出順序。下面我來說一下快速排序的原理:首先需要選擇乙個數作為對比(一般選擇的是陣列的第乙個數),然後有乙個指向陣列頭的數left,還有乙個指向陣列位的right。首先是要從右邊開始找出比對比數小的那個數存著,然後從左邊找出乙個比對比數大的數出來存在,依次迴圈直到left等於right結束第一輪迴圈,就把對比數放進去該放進的位置(也就是說左邊全部比它小的,右邊全部比它大的)。下輪開始就是把對比數的兩邊分開依次的排序直到所有數找到自已合適的位置,也就是把對比數找到合適的位置。因為每一次迴圈都會出現對比數。
#include
#define max_array 8
//快速排序函式
void quick_sort(int num, int left, int right);
int main(void)
;quick_sort(array, 0, max_array - 1);
for (i = 0; i < max_array; i++)
return 0;
}void quick_sort(int num, int left, int right)
int i, j, temp;
//儲存需要排序的那個數(對比數)
temp = num[left];
i = left;
j = right;
//從右邊開始檢查比5小的數
while (i != j)
num[i] = num[j];
//從左邊開始檢查比5大的數
while ((i < j) && (temp >= num[i]))
//最後把對比數插入應該的位置
num[j] = num[i];
}num[i] = temp;
//遞迴入口,把對比數的兩邊分開分別進行排序
quick_sort(num, left, i-1);
quick_sort(num, i+1, right);
}這裡我個人建議學者們還是畫乙個陣列來自已根據程式的思路理解一下,因為當時自已學的時候也發覺不畫圖真的難學,在這裡我自已也懶畫圖了,自已畫個圖還是很好理解的。
排序演算法思想記錄 快速排序演算法
思路 選取陣列中任意乙個數字作為對比位pivot,然後定義兩個指標位left right,分別從陣列開始和結束位置向內掃瞄,每次先動乙個指標位,如right遇到小於pivot的值,將該值存放到左指標處,接著左指標向內位移,遇到大於pivot的值存放至右指標處,依次迴圈到left與right重合,則完...
排序演算法之快速排序
快速排序使用分治法 divide and conquer 策略來把乙個序列 list 分為兩個子串行 sub lists 步驟為 從數列中挑出乙個元素,稱為 基準 pivot 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分割槽退出...
排序演算法之快速排序
快速排序入口 public void quicksort int lists 遞迴呼叫該函式。原理 每次從陣列從選乙個標兵 本實現為簡單起見直接選取給定範圍內的第乙個元素為標兵 讓後在給定範圍內進行雙向遍歷,目的是以標兵為分界線,將所有小於標兵值的數字排一邊,將所有大於標兵的數字 放到另一邊。標兵移...