leecode 169. Majority Element(C语言,快速排序,堆排序,各类排序算法复杂度比较)22
来源:互联网 发布:手机三维绘图软件 编辑:程序博客网 时间:2024/06/06 05:40
贴原题:
Given an array of size n, find the majority element. The majority
element is the element that appears more than ⌊ n/2 ⌋ times.You may assume that the array is non-empty and the majority element
always exist in the array.Credits: Special thanks to @ts for adding this problem and creating
all test cases.
解析:
本题是要找出一个数组中个数超过一半的数。
我的思路是排序之后,中间的那个数就是我们所要找的数。但是我用快速排序来做就已经时间超出了,于是百度查了查各类排序算法的复杂度问题,发现堆排序的复杂度比快速排序还要低。便想到了用堆排序来解决这个问题。
或许我应该写篇博客专门总结一下各类排序算法。
(图源:百度图片,侵删)
快速排序: 时间超出
int majorityElement(int* nums, int numsSize) { my_qsort(nums, numsSize);//快速排序我写过很多次了,这里就不重复了,或者可以调用库函数 return *(nums+numsSize/2);}
堆排序
void HeapAdjust(int arr[], int root, int len) //堆调整,构建大顶堆{ int lChild=2*root; int rChild=lChild+1; int largest=root; if(lChild<len && arr[lChild]>arr[largest])//判断左节点和根节点大小,把较大的放到根节点 { largest=lChild; } if(rChild<len && arr[rChild]>arr[largest])//判断右节点和根节点大小,把较大的放到根节点 { largest=rChild; } if(largest!=root) { arr[largest]=arr[root]^arr[largest];//把根、左、右三者的最大值放到根节点 arr[root]=arr[root]^arr[largest]; arr[largest]=arr[root]^arr[largest]; HeapAdjust(arr, largest, len);//交换之后其下的叶子节点可能不保持最大顶堆状态,递归调整 }}void HeapSort(int arr[], int length) //堆排序 { int i; for(i=length/2; i>=0; i--)//调整非叶子节点部分,构建大顶堆 { HeapAdjust(arr, i, length); } for(i=length-1; i>0; i--)//进行完一次堆调整之后最大值在堆头,把堆头和堆尾交换,调整个数减一 { arr[i] = arr[0]^arr[i];//交换堆头和堆尾 arr[0] = arr[0]^arr[i]; arr[i] = arr[0]^arr[i]; HeapAdjust(arr, 0, i);//堆调整 }}int majorityElement(int* nums, int numsSize) { HeapSort(nums, numsSize); return *(nums+numsSize/2);}
阅读全文
0 0
- leecode 169. Majority Element(C语言,快速排序,堆排序,各类排序算法复杂度比较)22
- 各类C语言排序算法汇总--插入排序、快速排序
- 各类排序算法复杂度、稳定性比较
- 各类排序算法实现(堆排序、希尔排序、快速排序、归并排序等)
- 【PHP-排序算法】快速排序、堆排序算法时间复杂度比较
- 各类排序算法比较(C++)
- c语言排序算法总结 选择 插入 冒泡 希尔 快速 堆排序 稳定性 时间复杂度 空间复杂度
- 排序算法----冒泡排序+插入排序+选择排序+快速排序+希尔排序+堆排序+归并排序+计数排序+基数排序+桶排序(c语言)
- 各类排序算法-堆排序
- C语言实现基本排序算法----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)
- 常见比较排序算法的实现(归并排序、快速排序、堆排序、选择排序、插入排序、希尔排序)
- 【数据结构】常用比较排序算法(包括:选择排序,堆排序,冒泡排序,选择排序,快速排序,归并排序)
- c语言排序算法(所有的都是升序,冒泡排序、插入排序、快速排序、选择排序、希尔排序、堆排序 )
- 排序算法复杂度比较
- 排序算法c语言描述---堆排序
- C语言程序----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)
- C语言:数组排序(插入排序、选择排序、泡排序、谢尔排序、快速排序、堆排序)
- 堆排序算法(C语言)
- 64位WIN7下虚拟机安装winxp
- 1. Two Sum——LeetCode OJ
- Sublime text 3搭建Python开发环境
- 10.3 NOIP模拟赛 DP + 最小生成树 + 容斥
- 【C++】实现双向循环链表
- leecode 169. Majority Element(C语言,快速排序,堆排序,各类排序算法复杂度比较)22
- 基于TensorFlow实现Skip-Gram模型
- [反演] 2017 计蒜之道 复赛 A. 阿里云秘钥池
- URAL 1009|URAL 1012|URAL 1013|K-based Numbers|高精度|动态规划
- 用construct 2来做一个射击小游戏吧ヾ(o´∀`o)ノ
- 51Nod 1085背包问题(dp)
- poj 3177 Redundant Paths 边-双连通分量
- pata1039(输出格式很重要,多一个空格就完蛋!)
- Bootstrap学习