标签: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 }
标签:etc 原来 color 链接 冒泡排序 空间 顺序 指针 const
原文地址:https://www.cnblogs.com/ZhengLijie/p/12491428.html