詳解快速排序

快速排序是一個非常重要的算法,對于大數(shù)據(jù)的排序,效率上要比冒泡排序和插入排序這些算法高很多,所以是程序員必須掌握的算法
  • 算法的思路
    快速排序算法其實(shí)很簡單,采用分治策略。步驟如下:
    1. 選取一個基準(zhǔn)元素(pivot)
    2. 比pivot小的放到pivot左邊,比pivot大的放到pivot右邊
    3. 對pivot左邊的序列和右邊的序列分別遞歸的執(zhí)行步驟1和步驟2
  • 具體代碼如下
/*
 * l:需要排序的左邊界
 * r:需要排序的右邊界
 * a:需要排序的數(shù)組 
 */
void quickSort(int *a, int l, int r)  {
    if (l < r)  {
        int i,j,x; 
        i = l;
        j = r;
        x = a[i];
        while (i < j) { 
             while(i < j && a[j] > x) {
                j--; // 從右向左找第一個小于x的數(shù)
             } 
             if(i < j)
             a[i++] = a[j]; //這里是i++所以是先賦值后自加
             while(i < j && a[i] < x) {
                i++; // 從左向右找第一個大于x的數(shù)
             }
             if(i < j)
             a[j--] = a[i];
         } 
    a[i] = x;
    quickSort(a, l, i-1); /* 遞歸調(diào)用 */
    quickSort(a, i+1, r); /* 遞歸調(diào)用 */
   }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • quicksort可以說是應(yīng)用最廣泛的排序算法之一,它的基本思想是分治法,選擇一個pivot(中軸點(diǎn)),將小于pi...
    黎景陽閱讀 467評論 0 1
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,769評論 0 33
  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,220評論 0 52
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,743評論 0 15
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個記錄插入到已排序好...
    依依玖玥閱讀 1,282評論 0 2