//模仿qsort实现冒泡排序(含升序和降序)的通用算法
//程序默认为升序,若需要降序则将MaopaoSort函数的if语句的“>”改为“<”可变为降序
//qsort函数:
//void qsort(void* base, size_t num, size_t size, int(* cmp)(const void* e1, const void* e2));
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h> //库函数qsort需要的头文件
struct Stu //结构体
{
char name[20];
float test;
};
int Cmp(const void* e1, const void* e2)
{
return *(int*)e1 - *(int*)e2; //两个值相减,根据实际类型写
}
int Cmp1(const void* e1, const void* e2)
{
return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name); //两个值相减,根据实际类型写
}
int Cmp2(const void* e1, const void* e2)
{
return ((struct Stu*)e1)->test - ((struct Stu*)e2)->test; //两个值相减,根据实际类型写
}
void Swap(void* p1, void* p2, int size) //将两个值的同一位置的字节数据交换
{
int i = 0;
for (i = 0; i < size; i++)
{
char t = *((char*)p1 + i);
*((char*)p1 + i) = *((char*)p2 + i);
*((char*)p2 + i) = t;
}
}
MaopaoSort(void* base, int sz, int size, int (*cmp)(const void* e1, const void* e2)) //模仿qsort函数
{
int i = 0, j = 0;
for (i = 0; i < sz - 1; i++)
{
for (j = 0; j < sz - 1 - i; j++)
{
if (cmp((char*)base + j * size, (char*)base + (j + 1) * size) > 0) //判断两个值的条件 把该行“>”改为“<”可变为降序
{
Swap((char*)base + j * size, (char*)base + (j + 1) * size, size); //将两个值的同一位置的字节数据交换
}
}
}
}
int main()
{
int i = 0;
int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 10 };
struct Stu s[] = { {"hong", 66.6}, {"ming", 99.9}, {"jie", 77.7} };
qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), Cmp); //qsort库函数 需要头文件 #include <stdlib.h>
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%d ", arr[i]);
}
printf("\n");
MaopaoSort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), Cmp); //模仿qsort实现冒泡排序的通用算法
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%d ", arr[i]);
}
printf("\n");
MaopaoSort(s, sizeof(s) / sizeof(s[0]), sizeof(s[0]), Cmp1); //模仿qsort实现冒泡排序的通用算法
for (i = 0; i < 3; i++)
{
printf("%s ", s[i].name);
}
printf("\n");
MaopaoSort(s, sizeof(s) / sizeof(s[0]), sizeof(s[0]), Cmp2); //模仿qsort实现冒泡排序的通用算法
for (i = 0; i < 3; i++)
{
printf("%.1f ", s[i].test);
}
}
c语言-模仿qsort实现冒泡排序的通用算法
最新推荐文章于 2024-06-15 23:39:09 发布