一. qsort函数的使用
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int cmp_int(const void* p1,const void* p2 ) //作为回调函数
{
return *(int*)p1 - *(int*)p2;
}
void text2()
{
int arr[] = { 3,1,2,4,8,6,5,9,7,0 };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(arr[0]), cmp_int);
print_arr(arr, sz);
}
void print_arr(int arr[], int sz) //打印函数的定义
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
text2();
return 0;
}
二. qsort函数的模拟实现
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
void print_arr(int arr[], int sz) //打印函数的定义
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int cmp_int(const void* p1,const void* p2 ) //作为回调函数
{
return *(int*)p1 - *(int*)p2;
}
void swap_t(char* a1, char* a2,size_t num) //交换函数的定义
{
size_t i = 0;
for (i = 0; i < num; i++)
{
char temp = *a1;
*a1 = *a2;
*a2 = temp;
a1++;
a2++;
}
}
void qsort_t(void* base,size_t sz,size_t num ,int (* cmp)(const void* p1,const void* p2))
//模拟qsort功能的函数
{
int i = 0;
for (i = 0; i < sz; i++)
{
int j = 0;
for (j = 0; j < sz - 1 - i; j++)
{
/*if(arr[j]>arr[j+1])*/
if (cmp((char*)base+j*num,(char*)base+(j+1)*num)>0) //判断是否需要交换功能函数
{
/*int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;*/
swap_t((char*)base + j * num, (char*)base + (j + 1) * num,num); //交换功能函数
}
}
}
}
void text3() //设计qsort函数的实现
{
int arr[] = { 3,1,2,4,8,6,5,9,7,0 };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort_t(arr, sz, sizeof(arr[0]), cmp_int);
print_arr(arr, sz);
}
int main()
{
//text1();
//text2();
text3();
return 0;
}