qsort快速排序

1 快速排序是冒泡排序的一種算法

2 選定一個基數(一般是第一個元素),經過一趟排序,將數據分爲兩部分,其中一部分數據比另外一部分數據都要小。數組

3再分別對兩部分數據施以一樣的算法進行分割(可用遞歸進行)。最終獲得有序數據優化

代碼以下排序

void qsort(int a[],int low,int high)
{
    if(low >= high)
    {
        return;
    }
    
    int first = low;
    int last = high;
    int key = a[first];
    
    //經過下面這個循環,將數組分紅了3部分。
    //low->(first-1) 所有小於key
    //first 等於key
    //(first+1)->high 所有大於key
    while (first < last)
    {
        while (first < last && a[last] >= key)
        {
            last--;
        }
        /*
          a[first]是第一個空位
         從右邊開始,將第一個比key小的數a[last]存放到左邊的空位
         同時a[last]成爲下一個空位
         */
        a[first] = a[last];
        
        while (first < last && a[first] <= key)
        {
            first++;
        }
        /*
         從左邊開始,將第一個比key大的數a[first]存放到右邊的空位
         同時a[first]成爲下一個空位
         */
        a[last] = a[first];
    }
    a[first] = key;
    
    
    //遞歸繼續對左右兩邊進行排序
    qsort(a,low,first-1);
    qsort(a,first+1,high);
    
}遞歸

4 快速排序的優化。能夠經過選着一個合理中值來避免最壞狀況發生ast

相關文章
相關標籤/搜索