域名备案的网站名称,适合设计师的网站编辑软件,企业免费自助建站系统,天津做网站建设的公司文章目录 每日一言1. 题目2. 解题思路2.1 使用冒泡排序2.2 使用qsort函数 3. 代码3.1 使用冒泡排序3.2 使用qsort函数 结语 每日一言
无论种子散落在何处#xff0c;都会长出一棵树#xff0c;向着天空#xff0c;挣扎生长。 1. 题目
题目链接#xff1a;按身高排序
给你… 文章目录 每日一言1. 题目2. 解题思路2.1 使用冒泡排序2.2 使用qsort函数 3. 代码3.1 使用冒泡排序3.2 使用qsort函数 结语 每日一言
无论种子散落在何处都会长出一棵树向着天空挣扎生长。 1. 题目
题目链接按身高排序
给你一个字符串数组 names 和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。
对于每个下标 inames[i] 和 heights[i] 表示第 i 个人的名字和身高。
请按身高 降序 顺序返回对应的名字数组 names 。 示例 1 输入names [“Mary”,“John”,“Emma”], heights [180,165,170] 输出[“Mary”,“Emma”,“John”] 解释Mary 最高接着是 Emma 和 John 。 示例 2 输入names [“Alice”,“Bob”,“Bob”], heights [155,185,150] 输出[“Bob”,“Alice”,“Bob”] 解释第一个 Bob 最高然后是 Alice 和第二个 Bob 。
提示
n names.length heights.length 1 n 103 1 names[i].length 20 1 heights[i] 105 names[i] 由大小写英文字母组成 heights 中的所有值互不相同 2. 解题思路
2.1 使用冒泡排序
冒泡排序的核心思想是通过反复比较相邻元素的大小将较大或较小的元素逐渐交换到数组的末尾。
通过两层嵌套的循环外层循环控制每一轮的排序次数内层循环通过比较相邻元素的身高大小来判断是否需要交换。
如果发现前面的元素身高比后面的元素身高小则进行交换。为了保持姓名与身高的对应关系同时也对保存人名的数组进行相应的交换操作。
通过引入一个临时变量 tmp可以完成两个整型元素的交换通过指针 char* name 的交换可以实现两个字符串指针的交换。
最后在排序完成后将排序后的数组大小赋值给 returnSize。
函数返回保存排序后的人名的字符串数组的指针 names。
2.2 使用qsort函数
首先定义了一个结构体 Person包含两个成员变量 heights 和 name分别表示身高和名字。
定义一个比较函数 cmpare该函数是为了配合标准库函数 qsort 进行排序操作。比较函数通过比较两个 Person 结构体的身高来进行排序按照身高从大到小的顺序进行比较。
在 sortPeople 函数中首先通过 malloc 动态分配了一个大小为 namesSize 的 Person 结构体数组 person。
然后将传入的人名和身高分别保存到 person 结构体数组中对应的元素中这样就建立了名字和身高的对应关系。
用 C 语言标准库函数 qsort对 person 数组进行排序使用自定义的比较函数 cmpare 进行比较。
完成排序后将排序后的人名从 person 结构体数组中拷贝回原来的 names 数组中这样就得到了排序后的名字数组。
别忘了释放掉person占用的空间。
最后将排序后的数组大小赋值给 returnSize并返回排序后的 names 数组。
3. 代码
3.1 使用冒泡排序
/*** Note: The returned array must be malloced, assume caller calls free().*/
char** sortPeople(char** names, int namesSize, int* heights, int heightsSize, int* returnSize) {for(int i0;inamesSize-1;i) {for(int j 0;jnamesSize-i-1;j) {if(heights[j]heights[j1]) {int tmp heights[j];heights[j] heights[j1];heights[j1] tmp;char *name names[j];names[j] names[j1];names[j1] name;}}}*returnSize namesSize;return names;
}3.2 使用qsort函数
/*** Note: The returned array must be malloced, assume caller calls free().*/typedef struct Person {int heights;char *name; }Person;//写一个比较函数为qsort的使用做准备
int cmpare(const void*p1,const void* p2) {return ((Person*)p2)-heights - ((Person*)p1)-heights;
}char** sortPeople(char** names, int namesSize, int* heights, int heightsSize, int* returnSize) {//申请一块空间用来存放结构体Person *person (Person*)malloc(sizeof(Person)*namesSize); //将名字和身高放到结构体当中for(int i 0; i namesSize; i) {person[i].name names[i];person[i].heights heights[i];}//使用qsort函数排序结构体qsort(person,namesSize,sizeof(Person),cmpare);//将排序后的结果放到names中for(int i 0; i namesSize; i) {names[i] person[i].name;}//释放动态内存管理申请的空间free(people)//返回数组大小*returnSize namesSize;return names;
}结语
请给自己些耐心一口吃不成胖子。 山外青山楼外楼莫把百尺当尽头。 保持空杯心态加油努力吧 都看到这里啦真棒(*^▽^*)
可以给作者一个免费的赞赞吗这将会鼓励我继续创作谢谢大家
编程小白写作如有纰漏或错误欢迎指正