码迷,mamicode.com
首页 > 编程语言 > 详细

c语言快排函数qsort

时间:2020-03-14 12:52:52      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:etc   原来   color   链接   冒泡排序   空间   顺序   指针   const   

  1 emmmmmm,不做题不知道,一做题吓一跳。原来冒泡排序效率是如此的低下
  2 leetcode上的一道题:
  3 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
  4 你可以假设数组是非空的,并且给定的数组总是存在多数元素。
  5 
  6 输入: [3,2,3]
  7 输出: 3
  8 
  9 输入: [2,2,1,1,1,2,2]
 10 输出: 2
 11 
 12 一:暴力枚举 运行超时
 13 二:冒泡排序 运行超时
 14 三:qsort快排 通过!
 15 
 16 思路:就是在排好顺序后多数元素一定排在n/2位置
 17 
 18 代码:
 19 int cmp(const void *a, const void *b)
 20 {
 21     return (*(int *)a-*(int *)b);
 22 }
 23 
 24 int majorityElement(int* nums, int numsSize)
 25 {
 26     qsort(nums,numsSize,sizeof(int),cmp);
 27    
 28    return nums[numsSize/2];
 29 }
 30 
 31 来源:力扣(LeetCode)
 32 链接:https://leetcode-cn.com/problems/majority-element
 33 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
 34 
 35 头文件:
 36 #include<stdlib.h>
 37 qsort(s,n,sizeof(s[0]),cmp);
 38 标注:
 39 s:待排序数组首地址
 40 n:数组中待排序元素数量
 41 sizeof(s[0]):各元素的占用空间大小
 42 cmp:指向函数的指针,用于确定排序的顺序
 43 int cmp(const void *a, const void *b)
 44 {
 45     return (*(int *)a - *(int *)b);  //a-b是升序 b-a是降序
 46 }
 47 
 48 简单代码:
 49 1.对一般的数组排序
 50 #include<stdio.h>
 51 #include<stdlib.h>
 52 
 53 int cmp(const void* a, const void* b)
 54 {
 55     return (*(int*)a - *(int*)b);
 56 }
 57 
 58 int main(void)
 59 {
 60     int a[10] = { 10,9,5,2,1,3,4,6,7,11 };
 61     
 62     qsort(a, 10, sizeof(int), cmp);
 63 
 64     for (int i = 0; i < 10; i++)
 65     {
 66         printf("%d ", a[i]);
 67     }
 68 
 69     return 0;
 70 }
 71 2.对结构体进行排序
 72 #include<stdio.h>
 73 #include<stdlib.h>
 74 
 75 struct ln
 76 {
 77     int num;
 78 }student[100];
 79 
 80 int cmp(const void* a, const void* b)  //一定要两个参数再赋值给ln类型的指针 不然没法排序
 81     struct ln xx = *(struct ln*)a;
 82     struct ln yy = *(struct ln*)b;
 83 
 84     return xx.num - yy.num;
 85 }
 86 
 87 int main(void)
 88 {
 89     int n;
 90 
 91     scanf("%d", &n);
 92     for (int i = 0; i < n; i++)
 93     {
 94         scanf("%d", &student[i].num);
 95     }
 96 
 97     qsort(student, n, sizeof(student[0]), cmp);
 98 
 99     for (int i = 0; i < n; i++)
100     {
101         printf("%d ", student[i].num);
102     }
103 
104     return 0;
105 }

 

c语言快排函数qsort

标签:etc   原来   color   链接   冒泡排序   空间   顺序   指针   const   

原文地址:https://www.cnblogs.com/ZhengLijie/p/12491428.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!