一、冒泡排序函数
冒泡函数想必大家都很熟悉了吧!今天我们就来用冒泡函数实现一下c中的qsort函数吧!
冒泡排序的原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。
以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。
#include<stdio.h>
#include<stdlib.h>
//交换函数(通过交换每一个字节达到对不同类型数据的交换)
void swap(char* x, char* y, int width)
{
int i = 0;
for (i = 0; i < width; i++)
{
char c = *x;
*x = *y;
*y = c;
x++;
y++;
}
}
/*
width=sizeof(arr[0]),代表一个数据的字节数。
sz,代表数据的个数。
*/
//实现bobble排序程序员不一定知道未来排序的数据类型
void bobble_sort(void* base, int sz, int width, int(*cmp)(void* a, void* b))
{
int i = 0, j = 0;
//趟数
for (i = 0; i < sz - 1; i++)
2 {
//每趟比较的对数
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 cmp(const void* x, const void* y)
{
int* a = (int*)x;
int* b = (int*)y;
return *a - *b;
}
int main()
{
int i = 0;
int arr[5] = { 2,5,1,6,8 };
int sz = sizeof(arr) / sizeof(arr[0]);
//qsort(arr,5, sizeof(arr[0]), cmp);
bobble_sort(arr, sz, sizeof(arr[0]),cmp);
for (i = 0; i < 5;i++)
{
printf("%d ", arr[i]);
}
return 0;
}