C语言习题——练习4 墨蓝 2022-12-22 06:17 139阅读 0赞 ### 回调函数-qsort各种操作 ### * 1.模仿qsort的功能实现一个通用的冒泡排序 * 2.使用库函数,qsort排序各种类型的数据 # 1.模仿qsort的功能实现一个通用的冒泡排序 # //定义比较函数 int compar(const void* _px, const void *_py) { //首先对传入的参数进行强制类型转换,转为整形指针类型 int *px = (int *)_px; int *py = (int *)_py; //比较两个数的大小, //1.升序:若x>y,返回1,x<y,返回-1,x=y,返回0 if (*px > *py) { return 1; } else if (*px < *py) { return -1; } else { return 0; } //2.降序:若x<y,返回1,x>y,返回-1,x=y,返回0 //if (*px < *py) //{ // return 1; //} //else if (*px > *py) //{ // return -1; //} //else //{ // return 0; //} } void swap(char *str,char *dst,int size) { //逐个字节交换 while (size) { char temp = *str; *str = *dst; *dst = temp; str++; dst++; size--; } } //1.模拟qsort实现-冒泡排序 void qsort_bubble(void *base, int num, int size, int(*compar)(const void*, const void*)) { //首先判断指针合法性 assert(base!=NULL); assert(compar != NULL); //将void *base类型变量进行强制类型转换,转为char*类型,方便按字节操作 char *p = (char *)base; //外层循环排num-1趟,内层循环每一趟比较num-1-i次 for(int i=0;i<num-1;i++) for (int j = 0; j < num - 1 - i; j++) { //比较大小 if (compar(p+j*size,p+(j+1)*size)>0) { //定义swap函数用于交换数据 swap(p + j*size, p + (j + 1)*size, size); } } } //定义一个打印整形数组的函数 void print(int arr[], int n) { for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); } int main() { int arr1[] = { 1,2,7,432,87,32,879,234,536 }; int arr2[] = { 1,2,7,432,87,32,879,234,536 }; int n = sizeof(arr1) / sizeof(arr1[0]); //1.先学会使用qsort函数 print(arr1, n); qsort(arr1, n, sizeof(int), compar); print(arr1, n); //2.自定义冒泡排序qsort_bubble函数 print(arr2, n); qsort_bubble(arr2, n, sizeof(int), compar); print(arr2, n); system("pause"); return 0; } # 2.使用库函数,qsort排序各种类型的数据 # //2.使用库函数,qsort排序各种类型的数据 void print(int arr[], int n) { for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); } // 定义整形比较函数 int compar1(const void* _px, const void *_py) { //首先对传入的参数进行强制类型转换,转为整形指针类型 int *px = (int *)_px; int *py = (int *)_py; //比较两个数的大小, //1.升序:若x>y,返回1,x<y,返回-1,x=y,返回0 if (*px > *py) { return 1; } else if (*px < *py) { return -1; } else { return 0; } } // //2.定义字符串比较 int compar2(const void*_px, const void*_py) { char *px = *(char **)_px; char *py = *(char **)_py; return strcmp(px, py); } //3.字符型比较 int com_char(const void*_px, const void*_py) { char *px = (char *)_px; char *py = (char *)_py; return *px - *py; } int main() { char *str[] = { "abcdfd","daxdasads","abdcsa","ascdasd" }; int arr1[] = { 1,2,7,432,87,32,879,234,536 }; int n = sizeof(arr1) / sizeof(arr1[0]); //1.整形 print(arr1, n); qsort(arr1, n, sizeof(int), compar1); print(arr1, n); //2.字符串型 qsort(str, sizeof(str) / sizeof(str[0]), sizeof(str[0]), compar2); for(int i=0;i<sizeof(str) / sizeof(str[0]);i++) printf("%s ", str[i]); printf("\n"); //3.字符型比较 char str1[] = { 'c','a','u','w','g','k' }; qsort(str1, sizeof(str1) / sizeof(str1[0]), sizeof(char), com_char); for (int i = 0; i<sizeof(str1) / sizeof(str1[0]); i++) printf("%c ", str1[i]); printf("\n"); //print(*str, sizeof(str) / sizeof(str[0])); system("pause"); return 0; }
相关 C语言:练习 ![c7267eaea5be4f8f8138b648012a94e0.png][]题一:宏实现计算偏移量 写一个宏,计算结构体中某变量相对于首地址的偏移,并给出说明 偏执的太偏执、/ 2023年10月14日 14:53/ 0 赞/ 53 阅读
相关 C语言:练习 ![6a7277307c8d403ebdea1fd7a5e848ec.png][]题一:单身狗 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 编写一个 悠悠/ 2023年10月14日 14:26/ 0 赞/ 49 阅读
相关 C语言:练习 ![f30c5ddd8ede4b9a887c5013e44f674f.png][] 题一:直接交换 交换两个变量(不创建临时变量) 不允许创建临时变量,交换两 梦里梦外;/ 2023年10月14日 12:59/ 0 赞/ 60 阅读
相关 C语言:练习 ![55a437787a0d4534b39a465dd4c8cb03.png][] 题一:模拟实现strlen strlen的模拟(递归实现) 递归和非递归分别 Bertha 。/ 2023年10月14日 11:41/ 0 赞/ 59 阅读
相关 C语言:练习 ![e731ca8449d34635908e5e3c8203deac.png][] 题一:九九乘法表 在屏幕上输出9\9乘法口诀表 %-d(加负号),在后面补空格 àì夳堔傛蜴生んèń/ 2023年10月14日 11:09/ 0 赞/ 60 阅读
相关 C语言:练习 ![0843c259fb2b4bfe861deadd6b7719de.png][] 目录 题一 题二 题三 题四 题五 题六 题七 题八 题九: 题十 桃扇骨/ 2023年10月14日 10:56/ 0 赞/ 56 阅读
相关 C语言习题——练习4 回调函数-qsort各种操作 1.模仿qsort的功能实现一个通用的冒泡排序 2.使用库函数,qsort排序各种类型的数据 1.模仿qsort的功能实现一 墨蓝/ 2022年12月22日 06:17/ 0 赞/ 140 阅读
相关 C语言习题——练习3 include<stdio.h> //1.杨辉三角 //在屏幕上打印杨辉三角。 //1 //1 1 //1 向右看齐/ 2022年12月21日 03:17/ 0 赞/ 168 阅读
相关 C语言习题——练习2 每日练习,不做讲解 include <stdio.h> include <assert.h> if 0 //1.代码调试解释问题 一时失言乱红尘/ 2022年12月20日 08:36/ 0 赞/ 198 阅读
相关 C语言习题——练习1 操作符练习题 1.求两个数二进制中不同位的个数 1.1 思路 1.2 代码 2.打印整数二进制的奇数位和偶数位 2.1 た 入场券/ 2022年12月19日 14:29/ 0 赞/ 209 阅读
还没有评论,来说两句吧...