一、快速排序思想
快速排序是氣泡排序的改善演算法,氣泡排序只能在相鄰的兩個值之間進行比較交換,這樣交換的次數比較多的情況下,效率比較低,而快速排序的思想是分治和遞迴的思想,取定陣列其中乙個值作為基數,將待排序陣列排序分為左邊小於基數的陣列,右邊大於基數的思想(假設是是公升序排序,遞迴方法後面講解),然後排序完的左右兩邊的陣列再和初始陣列的排序分治方法一樣再進行排序(也就是遞迴過程),直到待排序的陣列的數量為1(跳出遞迴的判斷),即不用再排序了,整個陣列也就排序好了。這個遞迴的方法如何寫?即如何將陣列分為左邊小於基數,右邊大於基數。假設我們取待待續陣列左邊的第乙個為基數(後面再交換到中間),待排序陣列左邊從左到右找出比基數大的與待排序陣列右邊從右到左找出比基數小的進行交換,依次進行遍歷,直到找到的左邊進行比較的序號和右邊比較的序號相等或左邊序號大於右邊序號了,這個找到的序號就是中間序號了,也就是基數應該進行交換的位置,和基數進行交換。以基數為分割線,這樣就分出了左邊比基數小,右邊比基數大。下面我們函式來寫出上述過程
void fastrecursive(int* list,int left_position,int right_postion)它的時間複雜度o (nlogn),最差的時候是o(n平方)int l = left_position;
int r = right_postion;
int middle_postion = left_position;
int base_value = list[left_position];
//while(r>l)
//遍歷陣列左邊,直到找到乙個比基數大的
while(ll)
};swap(&list[l],&list[middle_postion]);
middle_postion = l;
fastrecursive(list,left_position,middle_postion-1);//遞迴排序左邊
fastrecursive(list,middle_postion+1,right_postion);
}void fastsort(int* list,int len)
氣泡排序(c c 演算法學習過程筆記)
像冒泡一樣,從前到到後遍歷陣列,前後做對比,前面比後面大的則交換 公升序 void swap int num1,int num2 void bullursort int list,int len 優化一 k len 1 i,前面已經排好序的就不用再比較了 優化 二 如果一次排序過程都不用交換了,說明...
演算法學習 快速排序
快速排序 分治演算法 const int n 1e6 10 int a n a 待排序陣列,l 排序陣列的起始下標,r 排序陣列的結束下標 void quick sort int a,int l,int r 遞迴的終止條件 int x a l 選取排序的比較物件 int i l 1 設定排序的左指標...
演算法學習 快速排序
1 基本思想 取待排序陣列第乙個數作為參照數,建立left和right陣列,left儲存小於參照數的陣列集合,right儲存大於參照數的陣列集合,然後分別對left和right進行遞迴呼叫排序。2 舉例 11,2,3,43,23,5,6,9,10 取任意的乙個數為基準數 temp arr 0 遍歷陣...