在这我就直接丢代码了
编译环境:vs2019
代码:C语言
#define _CRT_SECURE_NO_WARNINGS 1 #pragma warning(disable:6031) #include<stdio.h> #include<string.h> //模范qsort功能实现一个可排任意类型数据的冒泡排序 void swap(char* buf1, char* buf2, int width) { while (width--) { char tmp = *buf1; *buf1 = *buf2; *buf2 = tmp; buf1++; buf2++; } } void bubble_sort(void* base, int num, int width, int(*cmp)(const void*, const void*)) { int i = 0; for (i = 0; i < num - 1; i++) { int j = 0; for (j = 0; j < num - 1 - i; j++) { //比较 - 默认为升序 if (cmp((char*)base + j * width, (char*)base + (j + 1) * width) > 0) { //交换 swap((char*)base + j * width, (char*)base + (j + 1) * width, width); } } } } /****************************** 下面进行数据的测试 **************************************/ //整型数据 int cmp_int(const void* e1, const void* e2) { return (*(int*)e1 - *(int*)e2);//升序 //return (*(int*)e2 - *(int*)e1);//降序 } void print_arr(int arr[], int sz) { int i = 0; for (i = 0; i < sz; i++) { printf("%d ", arr[i]); } printf("\n"); } void test_int() { int arr[10] = { 5,6,2,7,8,1,3,4,9,0 }; int sz = sizeof(arr) / sizeof(arr[0]); bubble_sort(arr, sz, sizeof(arr[0]), cmp_int); print_arr(arr, sz); } //结构体类型数据 struct Stu { char name[20]; int age; double score; }; int cmp_stu_by_name(const void* e1, const void* e2) { return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name); } void print_stu(struct Stu arr[], int sz) { int i = 0; for (i = 0; i < sz; i++) { printf("%s %d %lf\t\n", arr[i].name, arr[i].age, arr[i].score); } } void test_struct() { struct Stu arr[3] = { {"zhangsan",88,40.44},{"lisi",55,66.66},{"wangwu",99,100.0} }; int sz = sizeof(arr) / sizeof(arr[0]); bubble_sort(arr, sz, sizeof(arr[0]), cmp_stu_by_name); print_stu(arr, sz); } int main() { //测试冒泡排序 //测试整型数据 test_int(); //结构体类型数据测试 test_struct(); return 0; }
开学已经一段时间了,大一下真的太忙了,感觉时间好难挤,课程安排得好满,开学班级有好多工作要忙,每天7点起24点睡,时间总是不够,大物离散线代高数同时开设在这个学期,现在已经丢下好多课了,不管怎样,还是得安排好时间多学习,继续加油吧!