目录
一、库方法qsort参数解释
二、冒泡排序解释
三、模拟实现
1、冒泡排序函数
2、数值交换函数
3、测试函数
4、运行结果
5、源代码
一、库方法qsort参数解释
二、冒泡排序解释
三、模拟实现
1、冒泡排序函数
void bubble_sort(void* base,
int sz,
int width,
int (*cmp)(const void* e1, const void* e2))
{
int i = 0;
//趟数
for (i = 0; i < sz - 1; i++) {
//一趟排序
int j = 0;
for (j = 0; j < sz - 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);
}
}
}
}
2、数值交换函数
交换方式:以字节为单位,一个字节一个字节交换
//满足条件,交换两值
void Swap(char* buff1,char* buff2,int width) {
int i = 0;
for (i = 0; i < width; i++) {
char tmp = *buff1;
*buff1 = *buff2;
*buff2 = tmp;
buff1++;
buff2++;
}
}
3、测试函数
//int型的两数比较
int cmp_int(const void* e1, const void* e2) {
return *(int*)e1 - *(int*)e2;
}
print_arr(int arr[],int sz) {
int i = 0;
for (i = 0; i < sz; i++) {
printf("%d ",arr[i]);
}
printf("\n");
}
void test() {
//整型数组排序
int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
int sz = sizeof(arr) / sizeof(arr[0]);
printf("排序前:");
print_arr(arr, sz);
//排序
bubble_sort(arr, sz, sizeof(arr[0]), cmp_int);
printf("排序后:");
print_arr(arr,sz);
}
int main() {
test();
return 0;
}
4、运行结果
5、源代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//用库方法qsort()的方式,实现冒泡排序的通用算法
//满足条件,交换两值
void Swap(char* buff1,char* buff2,int width) {
int i = 0;
for (i = 0; i < width; i++) {
char tmp = *buff1;
*buff1 = *buff2;
*buff2 = tmp;
buff1++;
buff2++;
}
}
void bubble_sort(void* base,
int sz,
int width,
int (*cmp)(const void* e1, const void* e2))
{
int i = 0;
//趟数
for (i = 0; i < sz - 1; i++) {
//一趟排序
int j = 0;
for (j = 0; j < sz - 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型的两数比较
int cmp_int(const void* e1, const void* e2) {
return *(int*)e1 - *(int*)e2;
}
//打印arr
print_arr(int arr[],int sz) {
int i = 0;
for (i = 0; i < sz; i++) {
printf("%d ",arr[i]);
}
printf("\n");
}
void test() {
//整型数组排序
int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
int sz = sizeof(arr) / sizeof(arr[0]);
printf("排序前:");
print_arr(arr, sz);
//排序
bubble_sort(arr, sz, sizeof(arr[0]), cmp_int);
printf("排序后:");
print_arr(arr,sz);
}
int main() {
test();
return 0;
}
标签:sz,arr,int,void,qsort,冒泡排序,C语言,char,width
From: https://blog.51cto.com/qiux/6152251