Contents
  1. 1. 快速排序的使用(C 语言)

快速排序的使用(C 语言)

  • 注意要包含stdlib.h头文件
  • 用之前注意针对的数据类型
  • 写出正确的比较函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int cmpint(const void *a, const void *b)//用他们的int型返回值来判断大小关系
{

return *(int *)a - *(int *)b; //排列整型数组 *a-*b>0则返回1,小于返回-1
}//这是从小到大排序
//从大到小:return *(int *)b-*(int *)a;


int cmpchar(const void *a, const void *b)//同int型
{

return *(char *)a - *(char *)b;
}
/*在对浮点或者double型的一定要用三目运算符,因为如果也使用整型那样的想减的话,
如果是两个很接近的数则可能返回一个小数(大于
-1,小于1),而cmp的返回值是int型,
因此会将这个小数返回0,系统认为是相等,失去了本来存在的大小关系*/

int cmpdouble(const void *x, const void *y)
{

return *(double*)x > *(double*)y ? 1 : -1;
}

int main()
{

int i;
//对int类型数组排序
int a[6] = {5,4,1,3,2,6};
qsort(a, 6, sizeof(a[0]), cmpint);
for(i = 0; i < 6; i++)
printf("%d ",a[i]);
printf("\n\n");

int b[5] = {5,4,1,3,2};
qsort(b+2, 3, sizeof(b[0]), cmpint); //选中范围排序(从第3个数开始排序)
for(i = 0; i < 5; i++)
printf("%d ", b[i]);
printf("\n\n");

//对char类型数组排序(同int类型)
char s[] = "acBCAb";
int len = strlen(s);
qsort(s, len, sizeof(s[0]), cmpchar);
for(i = 0; s[i] != '\0'; i++)
printf("%c", s[i]);
printf("\n\n");

//对double类型数组排序(特别要注意)
double c[5] = {1.1,1.2,1.3,1.4,1.5};
qsort(c, 5, sizeof(c[0]), cmpdouble);
for(i = 0; i < 5; i++)
printf("%lf ", c[i]);//codeblocks用%f
printf("\n\n");
return 0;
}