快速排序

1.先從數列中取出一個數做爲基準數。ui

2.分區過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。遞歸

3.再對左右區間重複第二步,直到各區間只有一個數。sort

時間複雜度:O(N*logN);時間

代碼:while

void quick_sort(int s[], int l, int r)遞歸調用

{void

    if (l < r)

    {

        int i = l, j = r, x = s[l];

        while (i < j)

        {

            while(i < j && s[j] >= x) // 從右向左找第一個小於x的數

              j--; 

            if(i < j)

              s[i++] = s[j]; // 進行替換

          

            while(i < j && s[i] < x) // 從左向右找第一個大於等於x的數

              i++; 

            if(i < j)

              s[j--] = s[i];

        }

       s[i] = x;  // 剩餘的位置即爲x

        quick_sort(s, l, i - 1); // 遞歸調用

        quick_sort(s, i + 1, r);

    }

}

相關文章
相關標籤/搜索