//第一次尝试:
#include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 10 #define MAX_C 4 //void cmp_int(const void* _a,const void* _b) { // int* a = (int*)_a; // int* b = (int*)_b; // return *a - *b;//默认升序,若想降序,则返回*b-*a //} //上面为规范写法,下面是我理解觉得可以通过编译的 //整型 int cmp_int(int* a,int* b){ return *a - *b;//默认升序,若想降序,则返回*b-*a } //浮点型 int cmp_double(double* a,double* b) { //在对浮点或者double型的一定要用三目运算符,因为要是使用像整型那样相减的话 //如果是两个很接近的数则可能返回一个很小的小数(大于-1,小于1),而cmp的返回值是int型 //因此会将这个小数返回0,系统认为是相等,失去了本来存在的大小关系 return *a > * b ? 1 : -1; } //字符型 int cmp_char(char* a, char* b) { return *a - *b; } //字符串型 int cmp_str(char(* a),char(* b)) { return strcmp(a, b); } int main() { //整型 int arr_int[MAX] = { 1,8,6,9,7,3,2,10,4,5 }; qsort(arr_int, MAX, sizeof(arr_int[0]), cmp_int); for (int i = 0; i < MAX; i++) { printf("%d ", arr_int[i]); }printf("\n"); //浮点型 double arr_double[MAX] = { 1.0,8.0,6.0,9.0,7.0,3.0,2.0,10.0,4.0,5.0 }; qsort(arr_double, MAX, sizeof(arr_double[0]), cmp_double); for (int i = 0; i < MAX; i++) { printf("%f ", arr_double[i]); }printf("\n"); //字符型 char arr_char[MAX] = { 'c','d','g','y','u','i','e','z','h','l' }; qsort(arr_char, MAX, sizeof(arr_char[0]), cmp_char); for (int i = 0; i < MAX; i++) { printf("%c ", arr_char[i]); }printf("\n"); //字符串型 char arr_str[MAX_C][MAX_C] = { "asd","abf","bde","mny" }; qsort(arr_str, MAX_C, sizeof(arr_str[0]), cmp_str); for (int i = 0; i < MAX_C; i++) { printf("%s ", arr_str[i]); }printf("\n"); return 0; }
//练习使用库函数快速排序——qsort
void qsort(void* base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));
//1 待排序数组,排序之后的结果仍放在这个数组中
//2 数组中待排序元素数量
//3 各元素的占用空间大小(单位为字节)
//4 指向函数的指针,用于确定排序的顺序(需要用户自定义一个比较函数)
//qsort要求提供一个自己定义的比较函数。比较函数使得qsort通用性更好,有了比较函数qsort可以实现对数组、字符串、结构体等结构进行升序或降序排序。
//如比较函数
int cmp(const void *a, const void *b)
//中有两个元素作为参数(参数的格式不能变),返回一个int值,比较函数cmp的作用就是给qsort指明元素的大小是怎么比较的。
浙公网安备 33010602011771号