1. 程式人生 > >OJ刷題---分治法快速排序

OJ刷題---分治法快速排序

   輸入程式碼:

//演算法分析
//1)設定兩個變數I、J,排序開始的時候:I=0,J=N-1;
//2)以第一個陣列元素作為關鍵資料,賦值給key,即 key=A[0];
//3)從J開始向前搜尋,即由後開始向前搜尋(J=J-1即J--),找到第一個小於key的值A[j],A[j]與A[i]交換;
//4)從I開始向後搜尋,即由前開始向後搜尋(I=I+1即I++),找到第一個大於key的A[i],A[i]與A[j]交換;
//5)重複第3、4、5步,直到 I=J; (3,4步是在程式中沒找到時候j=j-1,i=i+1,直至找到為止。找到並交換的時候i, j指標位置不變。另外當i=j這過程一定正好是i+或j-完成的最後另迴圈結束。)

#include <iostream>
using namespace std;
void Quicksort(int a[],int low,int high)
{
    if(low>=high)
    {
        return ;
    }
    int first=low;
    int last=high;
    int key=a[first];
    while(first<last)
    {
         while(first < last && a[last] >= key)
        {
            --last;
        }
        a[first] = a[last];
        while(first < last && a[first] <= key)
        {
            ++first;
        }
        a[last]=a[first];
    }
    a[first]=key;
    Quicksort(a,low,first-1);
    Quicksort(a,last+1,high);
}
int main()
{
    int i,a[100],x,n=0;
    cin>>n;
    for(i=0; i<n; i++)
        cin>>a[i];
    Quicksort(a,0,n-1);
    for(i=0; i<=n-1; i++)
        cout<<a[i]<<" ";
    cout<<endl;
    return 0;
}

 執行結果: