快速排序思想:在partition中,首先以最右边的值作为划分值x,分别维护小于x的区间,等于x的区间,以及大于x的三个区间,最后返回划分值的左边界和右边界.时间复杂度为O(nlogn).publicclassQuickSort{publicstaticvoidquickSort(int[]arr){if(arr==null||arr.length<2)return;sortProgress
分类:
编程语言 时间:
2020-03-20 11:01:14
阅读次数:
61
听说你要排上亿个数据之 HeapSort ? 前言 : 来来来,今天我们来说说一个用来排大量数据所用的基础比较排序吧~ 注:阅读本文学习新技能的前置要求为:了解什么是二叉树及其数组性质,如果未达到要求的同学请直接看完图默默点右上角的×就好= =~ 在那之前我们先来看一个图 嗯,是不是很好玩?这玩意就 ...
分类:
编程语言 时间:
2019-09-13 20:02:33
阅读次数:
176
思想:1.构建最大堆2.把根节点和最后一个节点交换,,把堆长度-1,也就不考虑放最后的最大的元素了,再构建最大堆3.现在第二大的元素在根节点了,我们再重复步骤2,直到堆长度为1int MaxHeap(int DataArray[],int Father,int DataLen){ int Le...
分类:
编程语言 时间:
2015-11-29 15:01:16
阅读次数:
155
堆排序思想:堆排序,顾名思义,就是基于堆。堆分为最大堆和最小堆,事实上就是全然二叉树。最大堆要求节点的元素都要大于其孩子,最小堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做不论什么要求,事实上非常好理解。有了上面的定义,我们能够得知,处于最大堆的根节点的元素一定是这个堆中的最大值。事实...
分类:
编程语言 时间:
2015-03-12 16:52:55
阅读次数:
148
堆排序学习以及模板
#include
#include
int getParent(int i)
{
return (int)(i/2);
}
int getLeftSon(int i)
{
return (i*2);
}
int getRightSon(int i)
{
return (i*2 + 1);
}
void PrintHeap(i...
分类:
编程语言 时间:
2014-11-19 18:37:08
阅读次数:
302
关于查找数列中第k小的元素的常见方法:
1、先排序整个数列然后取第k-1个数
2、利用选择排序
3、选择算法
4、利用计数排序的思想
5、利用堆排序思想(一)
6、利用堆排序思想(二)...
分类:
编程语言 时间:
2014-10-22 14:36:48
阅读次数:
281
堆排序思想:
堆排序,顾名思义,就是基于堆。堆分为最大堆和最小堆,其实就是完全二叉树。最大堆要求节点的元素都要大于其孩子,最小堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求,其实很好理解。有了上面的定义,我们可以得知,处于最大堆的根节点的元素一定是这个堆中的最大值。其实我们的堆排序算法就是抓住了堆的这一特点,每次都取堆顶的元素,将其放在序列最后面,然后将剩余的元素重新调整为...
分类:
编程语言 时间:
2014-06-24 15:43:29
阅读次数:
193