您的位置:首页 > 其它

基本快速排序

2016-04-05 16:46 399 查看
基本思路:

每次确定数组中的中间那个数,然后分治两端的数组,直到要分治的数组只有一个数;

#include<stdio.h>
void quicksort(int a[10000],int first,int last)
{
if(first<last)           //如果该数组只有一个数即跳出,
{
int i=first,j=last;
int key=a[first];    //每次去第一个数作为key;
while(i<j)           //如果i==j,即已经达到目标:把整个数组中大于key的放在后面,把小于key的放在前面
{
while(i<j&&a[j]>=key)
{
j--;
}
if(i<j)
{
a[i]=a[j];
}
while(i<j&&a[i]<key)
{
i++;
}
if(i<j)
{
a[j]=a[i];
j--;
}
}
a[i]=key;                //中间值key;
quicksort(a,first,i-1);    //然后分治,中间的数已经确定下来了,然后分治前面和后面的数组
quicksort(a,i+1,last);     //如果分治的数组只有一个数,即已经排好序了
}
}
int main()
{
int n,a[10000],i;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
quicksort(a,0,n-1);
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: