快速排序函数qsort
void qsort(void* base, type nitems, type size, int (cmp) (const void* p1,const void* p2));
参数说明:
base 指针要排序的数组的首元素指针
nitems 数组元素的总个数
size 数组中每一个元素的字节大小
cmp 函数指针(用来比较两个元素的函数)
比较函数cmp
int (cmp) (const void *p1,const void*p2)
参数说明:
cmp的返回值小于0,p1会排在p2的左边,即升序
cmp的返回值大于0,p1会排在p2的右边,即降序
cmp的返回值等于0,p1和p2的顺序不确定
实战
【例题1】912. 排序数组 - 力扣(LeetCode)
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int cmp(const void* p1,const void* p2){
return *(int*)p1-*(int*)p2;
}
int* sortArray(int* nums, int numsSize, int* returnSize){
qsort(nums,numsSize,sizeof(int),cmp);
*returnSize = numsSize;
return nums;
}
【例题2】169. 多数元素 - 力扣(LeetCode)
int cmp(const int* p1,const int* p2){
return *(int*)p1 - *(int*)p2;
}
int majorityElement(int* nums, int numsSize){
// 出现次数大n/2
qsort(nums,numsSize,sizeof(int),cmp);
return nums[(numsSize-1)>>1];
}
【例题3】217. 存在重复元素 - 力扣(LeetCode)
int cmp (const int *p1,const int *p2){
return *(int*)p1 - *(int*)p2;
}
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;
}
【例题4】164. 最大间距 - 力扣(LeetCode)
int cmp(const void* p1,const void* p2){
return *(int*)p1 - *(int*)p2;
}
int maximumGap(int* nums, int numsSize){
if(numsSize<2) return 0;
qsort(nums,numsSize,sizeof(int),cmp);
int max = 0;
for(int i=1;i<numsSize;i++){
max = nums[i] - nums[i-1] > max ? nums[i] - nums[i-1] : max;
}
return max;
}
【例题5】905. 按奇偶排序数组 - 力扣(LeetCode)
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int judge (int value){
return value%2;
}
int cmp(const void* p1,const void* p2){
return judge(*(int*)p1) - judge(*(int*)p2);
}
int* sortArrayByParity(int* nums, int numsSize, int* returnSize){
qsort(nums,numsSize,sizeof(int),cmp);
*returnSize = numsSize;
return nums;
}
【例题6】539. 最小时间差 - 力扣(LeetCode)
int cmp(const void* p1,const void* p2){
return *(int*)p1 - *(int*)p2;
}
int findMinDifference(char ** timePoints, int timePointsSize){
int nums[timePointsSize];
int h,m,min=INT_MAX;int i;
for(i=0;i<timePointsSize;i++){
sscanf(timePoints[i], "%2d:%2d",&h,&m);
nums[i] = h*60 +m;
}
qsort(nums,timePointsSize,sizeof(int),cmp);
for(i=1;i<timePointsSize;i++){
min = min < nums[i] - nums[i-1] ? min : nums[i] - nums[i-1];
}
min = min < 24*60 + nums[0]- nums[i-1]? min :24*60 + nums[0] - nums[i-1];
return min;
}
标签:p2,p1,const,入门,nums,int,C语言,排序,cmp
From: https://blog.51cto.com/u_16188762/7723084