C语言快速排序

对简单的整数数组进行排序,要用最快的方法。

第1个回答  2013-09-24
#include<stdio.h>void quickSort(int *p,int head,int tail)
{
int low=head,high=tail;
int s=p[head];
if(head>=tail)return;
while(low<high){
while(low<high&&p[high]>s)high--;
if(low<high)p[low++]=p[high];
while(low<high&&p[low]<=s)low++;
if(low<high)p[high--]=p[low];
}p[low]=s;
quickSort(p,head,low-1);quickSort(p,low+1,tail);
}void main()
{
int i=0;
int array[10]={3,7,2,8,6,8,4,3,2,9};
quickSort(array,0,9);
for(i=0; i<10; i++)
{
printf("%d ",array[i]);
}
printf("\n");
}本回答被网友采纳
第2个回答  2013-09-24
#include<stdio.h>
main()
{
int a[100],i,n,j,temp,k;
printf("请输入n:");
scanf("%d",&n);
printf("请输入%d个数字:",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
//排序
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++)
if(a[k]>a[j]) k=j;
{ temp=a[k];
a[k]=a[i];
a[i]=temp;
}
}
printf("排序后:");
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
第3个回答  2013-09-24
#include<stdio.h>
int partition(int *a,int left, int right){
int leftptr,rightptr,pivot,t;
pivot=a[right];
leftptr=left-1;
rightptr=right;
while(1){
while(a[++leftptr]<pivot);
while(right>0&&a[--rightptr]>pivot);
if(leftptr>=rightptr) break;
else {
t=a[leftptr],a[leftptr]=a[rightptr],a[rightptr]=t;
}
}
t=a[leftptr],a[leftptr]=a[right],a[right]=t;
return leftptr;
}
void quicksort(int *a,int left, int right){
int m;
if(right-left<=0) return;
else {
m=partition(a,left,right);
quicksort(a,left,m-1);
quicksort(a,m+1,right);
}
}void main()
{
int i,a[]={3,4,5,6,9,0,8,1,7,2};
printf("快速排序前:");
for(i=0;i<10;i++)
printf("%d ",a[i]);
quicksort(a,0,10);
printf("\n快速排序后:");for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
第4个回答  2013-09-24
排序快慢得看你提供了多少数据,因为数据量的不同,选择最快的方法也不同。
相似回答