快速排序C語言版圖文詳解

算法原理:選一個數位基準,將序列分成兩個部分,一邊全是比它小序列,另一邊全是比它大序列。然後再分別對比他小的序列和比再次進行基準分割。依次分割下去,得到一個有序的隊列。

原理圖示:

 

編輯

 

 

 

 

 

 

 

 

 

 

 

 

算法步驟圖示:

算法步驟

以序列首位數字位基準。下標為j的哨兵從右往左出發,找到一個比6小的數,停在該位置

 

下標為i的哨兵從左往右出發,找到一個比6大的數。

交換兩個哨兵的數字。

繼續該過程

 

直到兩個哨兵相遇,j哨兵往左移動發現3比6小停了下來,i哨兵往右移動,與j哨兵相遇,說明一輪探測結束,然後將基準移動到哨兵相遇的位置。

 

此時左邊數列均比6小,右邊數列均比6大。對左右序列一次進行如上步驟,獲得一個有序的數列。

void QuickSort(int unsorted[], int begin, int end)
{
    if(begin > end)
    {
        return;
    }
    int temp = unsorted[begin];
    int i = begin;
    int j = end;
    while(i != j)
    {
        while(unsorted[j] >= temp && j > i)//哨兵從右往左找
        {
            j--;
        }
        while(unsorted[i] <= temp && j > i)//哨兵從左往右找
        {
            i++;
        }        
        if(j > i)//交換數值
        {
            int temp1 = unsorted[i];
            unsorted[i] = unsorted[j];
            unsorted[j] = temp1;
        }
    }
    unsorted[begin] = unsorted[i];
    unsorted[i] = temp;
    QuickSort(unsorted, begin, i-1);
    QuickSort(unsorted, i+1, end);
}