qsort:函数的原型
void qsort( void *base, size_t num,size_t width,int ( *compare )(const void *elem1, const void *elem2 ) );
size_t width: sizeof(int)
冒泡排序:
base:代表你要排序的数据
num:是排序数据的总数
size:要排序数据的字节大小
int ( *p )(const void *p1, const void *p2 )
函数指针
#include <stdio.h>
int _cmpInt(const void *p1, const void *p2) //比较p1和p2的大小
{
return *(int *)p1 - *(int *)p2;
}
void _swap(void *p1, void *p2, int size)
{
int i = 0;
for (i = 0; i < size; i++)
{
char tmp = *(((char *)p1) + i); //(char *)p1 强转 让字节为1
*(((char *)p1) + i) = *(((char *)p2) + i);
*(((char *)p2) + i) = tmp;
}
}
void MyQsort(void *base, int len, int size,int(*cmp)(const void *p1, const void *p2))//cmp函数 _cmpInt
{
//冒泡排序
int i = 0;//趟数
for (i = 0; i < len - 1; i++)
{
int j = 0;//次数
for (j = 0; j < len - 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 arr[] = { 12, 6, 3, 1, 9, 7, 2, 5, 19, 5 };
//char *arr[] = { 'a','b','d','c' };
int i = 0;
int len = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < len; i++)
{
printf("%c ", arr[i]);
}
printf("\n");
MyQsort(arr, len, sizeof(int), _cmpInt);
for (i = 0; i < len; i++)
{
printf("%c ", arr[i]);
}
printf("\n");
return 0;
}