快速排序采用的是分治的思想,即将数组从中间分成两部分,然后找出一个指定元素,比指定元素小的放左边;比指定元素大的放右边。
#include <bits/stdc++.h>
using namespace std;
void swapp(int *x,int *y)
{
int t=*x;
*x=*y;
*y=t;
}
//用分治的思想将数组分成两份
int fenzhi(int *a,int left,int right)
{
int j=left;//用来遍历数组
int i=j-1;//用于指向小于指定元素的位置
int k=a[right];//K是指定元素
//从左到右遍历数组,把小于等于指定元素的放到左边,大于指定元素的放到右边
for(;j<right;++j)
{
if(a[j]<=k)
{
swapp(&a[j],&a[++i]);
}
}
swapp(&a[right],&a[++i]);
//返回数组中间位置
return i;
}
void quicksort(int*a,int left,int right)
{
if(left>=right)
{
return;
}
int mid=fenzhi(a,left,right);
quicksort(a,left,mid-1);
quicksort(a,mid+1,right);
}
int main()
{
int a[100],n,x;
printf("请输入要输入的数据的总数:");
cin>>n;
printf("请输入数据:");
for(int i=0;i<n;i++)
{
cin>>x;
a[i]=x;
}
quicksort(a,0,n-1);
printf("排序后的数组为:");
for(int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
//cout << "Hello world!" << endl;
return 0;
}