qsort实现数据排序
学习该库函数之前,先回顾一下冒泡排序。
1.冒泡排序
#include<stdio.h>
void bubble_sort(int arr[], int sz)
{int i, j = 0;int flag = 1;for (i = 0; i < sz - 1; i++){for (j = 0; j < sz - 1 - i; j++){if (arr[j] > arr[j + 1]){int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;flag = 0;}}if (flag == 1){break;}}}int main()
{int arr[10] = { 1,3,5,7,9,8,6,4,2,10 };int sz = sizeof(arr) / sizeof(arr[0]);bubble_sort(arr, sz);int k = 0;for (k = 0; k < sz; k++){printf("%d ", arr[k]);}return 0;
}
运行结果:
2. qsort库函数排序
优点:相较于上面的冒泡排序,它可以排序任意类型的数据。
根据
由上可知:
该库函数4个参数中还包含了返回值类型为int的函数指针
#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]);}}int cmp_int(const void* p1, const void* p2)
{if (*(int*)p1 > *(int*)p2)return 1;else if (*(int*)p1 == *(int*)p2)return 0;else return -1;}void test1()
{int arr[] = { 9,8,7,6,5,4,3,2,1,0 };int sz = sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), cmp_int);print_arr(arr, sz);}int main()
{test1();return 0;
}
简化后:
#include<stdio.h>
#include<stdlib.h>int cmp_int(const void* p1, const void* p2)
{if (*(int*)p1 > *(int*)p2)return 1;else if (*(int*)p1 == *(int*)p2)return 0;else if (*(int*)p1 < *(int*)p2)return -1;
}int main()
{int arr[10] = { 1,3,5,7,9,8,6,4,2,10 };int sz = sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), cmp_int);int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}return 0;
}
运行结果: