【解题报告】《LeetCode零基础指南》(第六讲) C排序API(1)

简介: 【解题报告】《LeetCode零基础指南》(第六讲) C排序API(1)

全文目录

 ☘前言☘

🎁主要知识点梳理

         📝1.排序

                   🥗1.1 排序简介

                   🥙1.2 qsort简介

                   🥪1.3 qsort调用

                   🌮1.4 比较函数

                   🌯1.5 更多比较函数

 🍗课后习题

            912. 排序数组

            169. 多数元素

            217. 存在重复元素

            164. 最大间距

            905. 按奇偶排序数组

            539. 最小时间差

            976. 三角形的最大周长

            881. 救生艇

 📑写在最后

🎁主要知识点梳理

📝1.排序

🥗1.1 排序简介

排序可能是我们接触的第一个算法,从最简单的冒泡排序、选择排序、插入排序到归并排序、希尔排序、快排等,还有一些有趣的基数排序和计数排序、桶排序等。

但是今天我们用用造好的轮子——C语言的排序API


🥙1.2 qsort简介

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

c898cc8eb1f862e82a2b614adf8d966.png


🥪1.3 qsort调用

int a[5] = {5, 4, 3, 2, 1};
qsort(a, 5, sizeof(int), cmp);


执行之后就会变为{1, 2, 3, 4, 5},其中的cmp函数是需要我们自己去实现的。


🌮1.4 比较函数

1.函数原型


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


如果compar返回值大于0,则p1所指向元素会被排在p2后面。

如果compar返回值小于0,则p1所指向元素会被排在p2前面。

如果compar返回值等于0,则p1所指向元素与p2指向元素舒徐不确定。


2.函数定义

如果我们需要一个递增排序可以这么写:


int cmp(const void*p1, const void *p2) {
   int v1 = *(int *)p1;               
   int v2 = *(int *)p2;            
   if(v1 < v2) {               
       return -1;
   }else if(v1 > v2) {
       return 1;
   }
   return 0;
}


其中的传入参数是和定义保持一致,如果不一致会有警告信息,其实也没啥事0.0

然后v1和v2是取到要排序的元素,然后进行比较。


3.简化写法

如果确保数组相减不超过32位,也可以这么写:


int cmp(const void *p1, const void *p2) {
   return (*(int *)p1) - (*(int *)p2);
}


🌯1.5 更多比较函数

我们可以实现递减的函数:


int cmp(const void *p1, const void *p2) {
   return (*(int *)p2) - (*(int *)p1);
}



如果偶数在前 奇数在后


int Qua(int x) {
   return x % 2;
}
int cmp(const void *p1, const void *p2) {
   return Qua(*(int *)p1) - Qua(*(int *)p2);
}


相关文章
|
21天前
【LeetCode-每日一题】 删除排序数组中的重复项
【LeetCode-每日一题】 删除排序数组中的重复项
17 4
|
25天前
|
API 数据安全/隐私保护 开发者
淘宝 API:关键词搜商品列表接口,助力商家按价格销量排序分析数据
此接口用于通过关键词搜索淘宝商品列表。首先需在淘宝开放平台注册并创建应用获取API权限,之后利用应用密钥和访问令牌调用接口。请求参数包括关键词、页码、每页数量、排序方式及价格区间等。返回结果含总商品数量及具体商品详情。使用时需注意签名验证及官方文档更新。
|
3月前
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
|
3月前
|
算法 索引
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
这篇文章介绍了LeetCode第34题"在排序数组中查找元素的第一个和最后一个位置"的解题方法,通过使用双指针法从数组两端向中间同时查找目标值,有效地找到了目标值的首次和最后一次出现的索引位置。
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
|
3月前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
42 0
|
3月前
|
算法 索引 Python
【Leetcode刷题Python】34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
解决LeetCode "在排序数组中查找元素的第一个和最后一个位置" 问题的方法。第一种方法是使用两次二分查找,首先找到目标值的最左边界,然后找到最右边界。第二种方法是利用Python的list.index()方法,先正序找到起始位置,再逆序找到结束位置,并给出了两种方法的Python实现代码。
58 0
|
5月前
力扣随机一题 哈希表 排序 数组
力扣随机一题 哈希表 排序 数组
31 1
|
5月前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
5月前
|
存储 算法 数据可视化
【模拟面试问答】深入解析力扣164题:最大间距(桶排序与排序方法详解)
【模拟面试问答】深入解析力扣164题:最大间距(桶排序与排序方法详解)
|
5月前
|
存储 算法 数据可视化
深入解读力扣154题:寻找旋转排序数组中的最小值 II(多种方法及详细ASCII图解)
深入解读力扣154题:寻找旋转排序数组中的最小值 II(多种方法及详细ASCII图解)