快速排序

#include<iostream.h>

   
    // 切分數據爲左右兩個部分,返回中間元素x的編號
    // 主要的過程就是:選擇一個元素x作爲分界點,將比x大的元素放到x右邊,其餘放到x左邊。
int Partition (int* Array, int nLower, int nUpper)
    {
        int nLeft = nLower + 1;
        int Pivot = Array[nLower];
       
        int nRight = nUpper;
       
        int Swap;
        while (nLeft <= nRight)
        {
            while (nLeft <= nRight && Array[nLeft]<=Pivot)
                nLeft = nLeft + 1;
            while (nLeft <= nRight && Array[nRight]> Pivot)
                nRight = nRight - 1;

            if (nLeft < nRight)
            {
                Swap = Array[nLeft];
                Array[nLeft] = Array[nRight];
                Array[nRight] = Swap;
                nLeft = nLeft + 1;
                nRight = nRight - 1;
            }
        }
       
        Swap = Array[nLower];
        Array[nLower] = Array[nRight];
        Array[nRight] = Swap;
        return nRight;
    }

 void QuickSort(int* Array, int nLower, int nUpper)
    {
        // 測試是否排序完畢
        if (nLower < nUpper)
        {
            // 分解和分別進行排序
            int nSplit = Partition (Array, nLower, nUpper);//數據切分爲兩個部分
            QuickSort (Array, nLower, nSplit - 1);//左半部分遞歸排序
            QuickSort (Array, nSplit + 1, nUpper);//右半部分遞歸排序
        }
    }
void main()
{

 int i[]={2,4,5,3,1,9,10,11,6,8,7};
 int j=sizeof(i)/sizeof(int);
 QuickSort(i,0,j);
 for(int ii=0;ii<j;ii++)
 {
 cout<<i[ii];
 }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章