模仿qsort功能实现一个冒泡排序

    xiaoxiao2022-07-02  100

    目录

    1.简单介绍qsort

    2.模仿qsort实现冒泡排序


     

    qsort函数原型

    void qsort (void* base, size_t num, size_t size,int (*compar)(const void*,const void*));

    一些解释:

    1.base:指向要排序数组的第一个对象                 类型为void*

    2.num:base所指向数组的元素总数                      类型为unsigned int

    3.size:数组中每个元素的大小(以字节为单位)    类型为unsigned int

    4.compor:指向比较两个元素的函数,它需要遵循以下原型

    int compar (const void* p1, const void* p2);

    以两个指针为参数

    返回值


    用qsort函数完成排序

    整数快排

    #include <stdio.h> #include <stdlib.h> int cmp(const void *a, const void *b) { return *(int*) a - *(int * )b; //从小到大 //return *(int*) b - *(int*) a; //从大到小 } int main(){ int num[8] = { -1,5,8,6,7,4,18,-6 }; int len = 8; qsort(num, len, sizeof(int), cmp); for (int i = 0;i < len;++i) { printf("%d ", num[i]); } printf("\n"); system("pause"); return 0; }

    字符串快排

    #include <stdio.h> #include <stdlib.h> int cmp(const void *a, const void *b) { return *(char *)a - *(char*)b; } int main() { char str[7][9] = { "January", "February", "March", "April", "May", "June", "July" }; int sum = 7; int i; printf("排序前:\n"); for (i = 0; i < sum; i++) { printf("%s\n", str[i]); } qsort(str, sum, sizeof(char)*9, cmp); printf("排序后:\n"); for (i = 0; i < sum; i++) { printf("%s\n", str[i]); } system("pause"); return 0; }

    模仿qsort实现冒泡排序

    因为是模仿qsort 所以函数原型与qsort相同 下面直接给出代码

    #include <stdio.h> #include <stdlib.h> void swap(int *a, int *b) { int tmp = 0; tmp = *a; *a = *b; *b = tmp; } int int_cmp(const void *a, const void *b) { return *(int*)a - *(int *)b; } void bubble(void *arr, int size, int wid, int(*cmp)(const void *a, const void *b)) { for (int i = 0;i < size - 1;++i) { for (int j = 0;j < size - 1 - i;++j) { if (cmp((int*)arr + j , (int *)arr + (j + 1) )>0) { swap((int*)arr + j, (int *)arr + (j + 1)); } } } } int main() { int arr[8] = { 0,4,6,8,2,10,7,3 }; int size = sizeof(arr) / sizeof(arr[0]); int wid = sizeof(arr[0]); bubble(arr, size, wid, int_cmp); for (int i = 0;i < size;++i) { printf("%d ", arr[i]); } puts("\n"); system("pause"); return 0; }

    一些解释

    bubble函数中 if 那一行的作用是在 比较arr数组中元素的大小

    arr+j和arr+j+1比较  

    这里涉及一维数组的相关知识 

    一维数组名相当于首元素的首地址

    +1相当于向左偏移了一个元素的大小

    最新回复(0)