【题解】《算法零基础100讲》(第41讲) C语言 排序 API
2021/12/4 14:17:06
本文主要是介绍【题解】《算法零基础100讲》(第41讲) C语言 排序 API,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 一. 排序API
- 二. 推荐专栏
- 三. 相关练习
- 3.1 排序数组
- 3.2 多数元素
- 3.3 存在重复元素
- 3.4 最大间距
- 3.5 按奇偶排序数组
一. 排序API
排序API就是是同C语言内置的函数qsort进行排序。
qsort的定义方式:
void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*));
base是指需要排序的数组;
num是数组的长度;
size是所需排序的数组的数据类型大小
cmpar是比较函数的地址;
代码如下:
int cmp(const void *a, const void* b){ return *(int*)a - *(int*)b; } int main(){ int arr[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; int arrSize = sizeof(arr) / sizeof(arr[0]); qsort(arr, arrSize, sizeof(int), cmp); for (int i = 0; i < arrSize; i++){ printf("%d ", arr[i]); } putchar('\n'); return 0; }
二. 推荐专栏
《算法零基础100讲》(第41讲) C语言 排序 API
三. 相关练习
3.1 排序数组
题目链接:
912. 排序数组
我们直接用qsort排序
代码如下:
int cmp(const void *a, const void* b){ return *(int*)a - *(int*)b; } int* sortArray(int* nums, int numsSize, int* returnSize){ *returnSize = numsSize; qsort(nums, numsSize, sizeof(int), cmp); return nums; }
3.2 多数元素
题目链接:
169. 多数元素
思路分析:
出现次数大于n/2的元素,我们将数组排好序后,假设出现次数最大的数为m,不管m是从第一个开始,还是从其他地方,因为它的数量大于n/2,所以nums[n / 2]一定为m。
代码如下:
int cmp(int *a, int *b){ return *a - *b; } int majorityElement(int* nums, int numsSize){ qsort(nums, numsSize, sizeof(int), cmp); return nums[numsSize / 2]; }
3.3 存在重复元素
题目链接:
217. 存在重复元素
思路分析:
要判断一个数组有没有重复元素,排序就是一个很简单的办法,排好序后,相同的元素相邻,直接遍历判断相邻的元素即可。
代码如下:
int cmp(int *a, int *b){ return *a - *b; } bool containsDuplicate(int* nums, int numsSize){ qsort(nums, numsSize, sizeof(int), cmp); for(int i = 1; i < numsSize; i++){ if(nums[i] == nums[i - 1])return true; } return false; }
3.4 最大间距
题目链接:
164. 最大间距
思路分析:
我们用qsort对其排好序,然后再找出相邻之间最大的差值。
代码如下:
int cmp(int *a, int *b){return *b < *a;} int maximumGap(int* nums, int numsSize){ qsort(nums ,numsSize ,sizeof(int) ,cmp); int max = 0; for(int i = 1;i < numsSize;i++) if(max < nums[i] - nums[i - 1]) max = nums[i] - nums[i - 1]; return max; }
3.5 按奇偶排序数组
题目链接:
905. 按奇偶排序数组
思路分析:
我们按照规则写cmp函数即可,偶数在前,奇数在后。
代码如下:
int cmp(int* a, int* b){ if(*a % 2){//a为奇数 if(*b % 2){//b也为奇数 return *a - *b; } return 1;//偶数在前 } else{ if(*b % 2){ return -1; } return *a > *b; } } int* sortArrayByParity(int* nums, int numsSize, int* returnSize){ qsort(nums, numsSize, sizeof(int), cmp); *returnSize = numsSize; return nums; }
这篇关于【题解】《算法零基础100讲》(第41讲) C语言 排序 API的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享