—、qsor函数:
qsort函数是一个能排序任何数据类型的函数,让我们先来了解一下qsort函数的形参和返回值。
void qsort( void *base, size_t num, size_t width, int (__cdecl*compare(const void *elem1, const void *elem2 ) );
函数原型中qsort函数有四个参数,分别为:
base:是指目标数组的开始位置,可以理解为数组首元素的地址;
num:是指数组中元素的个数;
width:是指数组中每个元素的类型的大小;
#include <stdio.h> #include <string.h> void swap(char* arr1, char* arr2, int sz) { int i = 0; char tmp; for (i = 0; i < sz; i++) { tmp = *(arr1 + i); *(arr1 + i) = *(arr2 + i); *(arr2 + i) = tmp; } } //int compare_int(const void *elem1, const void *elem2) //{ // return (*(int*)elem1 - *(int*)elem2); //} int compare_str(const void *elem1, const void *elem2) { return strcmp((char *)*(int *)elem1, (char *)*(int *)elem2); } void my_qsort(const void *base, size_t num, size_t width, int( *compare)(const void *elem1, const void *elem2)) { int i, j; char* arr =(char *) base; for (i = 0; i < num - 1; i++) { //int flag = 0; for (j = 0; j < num - i - 1; j++) { if (compare_str((char *)(arr + width*j), (char *)(arr + (j + 1)*width))>0) { //flag = 1; swap((char *)(arr + j*width), (char *)(arr + (j + 1)*width), width); } } } } int main() { int i; char* arr[] = { "bbbbbb", "cccccc", "aaaaaaa" }; int sz = sizeof(arr) / sizeof(arr[0]); my_qsort(arr, sz, sizeof(char *), compare_str); for (i = 0; i < sz; i++) { printf("%s ", arr[i]); } return 0; }