快速排序演算法的平均時間效能為(o(n *log n)),是最快的排序演算法之一,但是由於使用了遞迴,需要的輔助空間遠遠大於插入排序。
快速排序演算法是不穩定的排序,例如, 4 5 5 1, 第一趟排序時,第乙個5 和1會交換。
基本思想:
1、 採用分治法,每次選擇陣列中乙個元素(通常為第乙個)作為關鍵字,將陣列分成兩個段,左邊部分元素都小於關鍵字,右邊部分元素都大於關鍵字。
2.、採用遞迴的方法,分別對左邊部分、右邊部分依次遞迴。
**如下:
// arr 為需要排序的陣列,low 和 high 表示陣列的下標,需要從low 到high 進行排序
void qsort(int arr, int low , int high)
}//函式目的是需要 將選定的關鍵字 插入到合適的位置,使陣列分段,並返回該元素的位置
int partition(int arr ,int low , int high)
pivot = arr[low];//將第乙個元素設為基準,此時需要從右邊指標開始移動,這樣能保證left == right時,left指向的是比基準值更小的數
index = low; //儲存基準的索引
while(low < high)
while((arr[low] <= pivot)&&(low < high))
if( low < high)
}//把left == right處的值與 基準位置的值交換,將基準值放到中間
arr[index] = arr[low];//從右邊移動的話arr[low] 一定會比arr[index]值小
arr[low] = pivot;
printf("low = %d\n",low);
return low;
}
排序演算法 快速排序演算法
網際網路的大型公司還在火熱招聘中,參與了一次又一次的筆試,都不通過,我還是太菜!作為程式設計人員,需要邁過去 資料結構與演算法 這個坎,畢竟,筆試不會真的很虧,加油吧,少些水,多點實操。一 快速排序演算法思想 從一組資料中找出乙個基準值,一般是選擇中間值作為基準值,然後從左到右將值與基準值進行比較,...
演算法 排序演算法 快速排序
快速排序是對冒泡法排序的一種改進。快速排序演算法 的基本思想是 將所要進行排序的數分為左右兩個部分,其中一部分的所有資料都比另外一 部分的資料小,然後將所分得的兩部分資料進行同樣的劃分,重複執行以上的劃分操作,直 到所有要進行排序的資料變為有序為止。可能僅根據基本思想對快速排序的認識並不深,接下來以...
排序演算法 快速排序
快速排序使用分治法 divide and conquer 策略來把乙個序列 list 分為兩個子串行 sub lists 步驟為 1.從數列中挑出乙個元素,稱為 基準 pivot 2.重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分...