普通快排
#include<stdio.h>
#include<stdlib.h>
void f(int *a,int left,int right)
{
if(left<right)
{
int l=left;
int r=right;
int k=a[left];
while(l<r)
{
while(l<r&&a[r]>=k)
r--;
a[l]=a[r];
while(l<r&&a[l]<=k)
l++;
a[r]=a[l];
}
a[l]=k;
f(a,left,l-1);
f(a,l+1,right);
}
}
int main()
{
int a[11];
int b,c,n;
scanf("%d",&n);
for ( b=0;b<n;b++)
scanf("%d",&a[b]);
printf("\n");
f(a,0,n-1); //
for( c=0;c<n;c++)
printf("%d ",a[c]);
printf("\n");
return 0;
}
库函数快排
int comp(const void*a,const void*b)
{
return *(int*)a - *(int*)b;//若为从大到小改为return *(int*)a - *(int*)b;
}
int main()
{
int a[11];
int b,c,n;
scanf("%d",&n);
for ( b=0;b<n;b++)
scanf("%d",&a[b]);
printf("\n");
qsort(a,n,sizeof(a[0]),comp);//
for( c=0;c<n;c++)
printf("%d ",a[c]);
printf("\n");
return 0;
}
结构体
结构体中某个元素快排
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct node
{
int num;
int data;
}p[110];
void sort(struct node *p,int left,int right)
{
if(left<right)
{
int l=left;
int r=right;
struct node k=p[l];
while(l<r)
{
while(l<r&&p[r].data>=k.data)
r--;
p[l]=p[r];
while(l<r&&p[l].data<=k.data)
l++;
p[r]=p[l];
}
p[l]=k;
sort(p,left,l-1);
sort(p,l+1,right);
}
}
int main()
{
int i,m;
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",&p[i].data);
p[i].num=i+1;
}
sort(p,0,m-1);
for(i=0;i<m;i++)
printf("%d %d\n",p[i].data,p[i].num);
return 0;
}
结构体中库函数快排
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
struct node
{
int data;
int num;
}k[110];
int cmp(const void *a,const void *b)
{
if((*(struct node*)a).data>(*(struct node*)b).data)
return 1;
else
return -1;
}
int main()
{
int i,n;
while(~scanf("%d",&n)&&n)
{
for(i=0;i<n;i++)
scanf("%d%d",&k[i].data,&k[i].num);
qsort(k,n,sizeof(k[0]),cmp);
for(i=0;i<n;i++)
printf("%d %d\n",k[i].data,k[i].num);
printf("\n");
}
return 0;
}