御坂坂的c++學習之路(6)

依然是遞歸,此次是快排算法

#include<bits/stdc++.h>
using namespace std;
void quick_sort(int arr[],int left,int right)
{
   if(left < right)
   {
       int i = left,j = right,poi = arr[left];//以arr[]={0,1,2,3,4,5,6,7,8,9}爲例,i自然爲0,j則爲9,poi = arr[0] = 0;
       while(i < j)//當數組左邊界小於右邊界的時候
       {
           while(arr[j] <= poi&&i < j)//從右邊循環判斷找到比poi,也就是arr[left]大的值
            j--;
            if(i < j)//將比poi大的值替換掉arr[left],但是poi的值並沒有發生變化
                arr[i++] = arr[j];
           while(arr[i] >= poi&&i < j)//從左邊循環判斷找出比poi小的值
            i++;
            if(i < j)
                arr[j--] = arr[i];//將這個值替換掉前面替換掉arr[i]的值
       }
       arr[i] = poi;//剩下一個值,將poi的值給它
       quick_sort(arr,left,i-1);//遞歸排序左邊部分
       quick_sort(arr,i+1,right);//遞歸排序右邊部分。

   }
};
int main()
{
    int arr[10];
    for(int i = 0;i < 10;i++)
        cin>>arr[i];
    quick_sort(arr,0,9);
     for(int i = 0;i < 10;i++)
       cout<<arr[i]<<"\t";
    cout<<endl;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章