当前位置: 首页> 健康> 科研 > 沈阳定制网站方案_桃子网站_新东方线下培训机构官网_免费seo培训

沈阳定制网站方案_桃子网站_新东方线下培训机构官网_免费seo培训

时间:2025/7/11 15:00:54来源:https://blog.csdn.net/2301_80258336/article/details/143661994 浏览次数:0次
沈阳定制网站方案_桃子网站_新东方线下培训机构官网_免费seo培训

一、qsort的介绍

首先我们通过cplusplus来了解一下qsort函数。
在这里插入图片描述
对函数的四个参数所表示的意义:
在这里插入图片描述

二、qsort的使用

#include <stdio.h>
#include<stdlib.h>int int_cmp(const void * p1, const void * p2)
{return (*( int *)p1 - *(int *) p2);
}
int main()
{int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };int i = 0;qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof (int), int_cmp);for (i = 0; i< sizeof(arr) / sizeof(arr[0]); i++){printf( "%d ", arr[i]);}printf("\n");return 0;
}

三、qsort的实现

qsort底层是使用快速排序通过回调比较函数完成的,因此原理很简单,我们只需要将快速排序中的比较部分换成比较函数即可完成实现

#include <stdio.h>//经常使用的部分封装成函数
void _swap(void* p1, void* p2, int size)
{int i = 0;for (i = 0; i < size; i++){char tmp = *((char*)p1 + i);*((char*)p1 + i) = *((char*)p2 + i);*((char*)p2 + i) = tmp;}
}//升序
//快速排序
void QuickSort(void* base, int num, int size, int(*cmp)(void*, void*), int left, int right)
{//递归终止条件if (left >= right){return;}int begin = left, end = right;//先排一趟int key = left;while (left < right){//右面的值比key对应的值大while (left < right && cmp((char*)base + right* size, (char*)base + key * size) > 0){--right;}//左面的值比key对应的值小while (left < right && cmp((char*)base + left * size, (char*)base + key * size) > 0){++left;}_swap((char*)base + left * size, (char*)base + right * size,size);}_swap((char*)base + left * size, (char*)base + key * size,size);key = left;//这样子就会使得key对应的值到达正确的位置//开始用begin和end分别保存左右端点值//[left,key-1]  key  [key+1,right]QuickSort(base, num, size, cmp, begin, key - 1);QuickSort(base, num, size, cmp, key + 1, end);
}void my_qsort(void* base, int num, int size, int(*cmp)(void*, void*))
{QuickSort(base, num, size, cmp, 0, num - 1);
}int int_cmp(const void* p1, const void* p2)
{return (*(int*)p1 - *(int*)p2);
}int main()
{int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };int i = 0;my_qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), int_cmp);for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){printf("%d ", arr[i]);}printf("\n");return 0;
}
关键字:沈阳定制网站方案_桃子网站_新东方线下培训机构官网_免费seo培训

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: