C语言使用快排的方式有两种,1、直接用库函数stdlib.h里的qsort函数 2、自己编写快排代码(第一种方便,第二种较为自由)

qsort 的函数原型是:
void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));
它的参数为:

1 待排序数组首地址
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序

下面附上样例代码:

 #include<stdio.h>
#include<stdlib.h>
int comp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
int main()
{
int *array;
int n;
scanf("%d",&n);
array=(int*)malloc(n*sizeof(int));
int i=;
for(;i<n;i++)
{
scanf("%d",(array+i));
}
qsort(array,n,sizeof(int),comp);
for(i=;i<n;i++)
{
printf("%d\t",array[i]);
}
free(array);
array=NULL;
return ;
}

另外自己编一个快排代码也是很方便的,对于初学者学会快排代码也是很有必要的。

下面说一下快排的基本思想。快排是冒泡的改进版,基本思想是选中要排序序列中的一个数,然后让它左边的数都比它小,右边的数都比它大(如果要降序的话就反之),如此递归即可。下面附上代码:

#include<stdio.h>

void qsort(int *a,int l,int r)
{
int i=l;
int j=r;
int mid=a[(l+r)/];
int temp;
while (i<j)
{
while (a[i]<mid) i++;
while (a[j]>mid) j--;
if (i<=j)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
i++;
j--;
}
}
if (l<j) qsort(a,l,j);
if (i<r) qsort(a,i,r);
} int main()
{
int n;
scanf("%d",&n);
int a[]={};
int i;
for (i=;i<=n;i++) {
scanf("%d",&a[i]);
}
qsort(a,,n);
for (i=;i<=n;i++) {
printf("%d |",a[i]);
}
return ;
}

了解了思想之后可以拓展双关键字快排。见博客。

05-01 03:20