依然是递归,此次是快排算法
#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;
}