就是一个简单的快排,初步学习,原理总的来说就是 找一个基准数 temp 我的代码则 第一次找的为最左边的 left
然后定义一个 j 和i , j从右边往左找小于 temp(基准数),i 从左往右找大于temp 找到后,将a[j]与a[i]交换。当j与i碰头即 j==i时
将a[i]即a[j] 与temp交换,不断往复。
#include <iostream>
using namespace std;
int a[100];
void quicksort(int left,int right)
{
int i,j,temp,t;
if(left>right)
return;
temp=a[left];//基准数
i=left; //左哨兵
j=right; //右哨兵
while(i!=j)
{
while(a[j]>=temp&&j>i)
j--; //找到一个打止
while(a[i]<=temp&&i<j)
i++;
if(i<j) //交换
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left]=a[i]; //讲基准数 交换至中间
a[i]=temp;
quicksort(left,i-1); //再做 temp左边的
quicksort(i+1,right); // 右边的
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
quicksort(0,n-1);
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}