![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序算法
换了马甲的小强
爆发自己的小宇宙吧!
展开
-
排序算法——小顶堆
一、小顶堆原理小顶堆实际上是一个二叉树,满足:Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]规则,即根节点既小于或等于左子树的关键字值,又小于或等于右子树的关键字值。二、应用场景比如求10亿个数中的最大的前10个数,时时构建只有10个元素的小顶堆,如果比堆顶小,则不处理;如果比堆顶大,则替换堆顶,然后依次下沉到适当的位置。三、代码实现...原创 2018-10-16 17:30:09 · 10289 阅读 · 0 评论 -
排序算法——冒泡排序
一、算法原理比较相邻两个元素a[j]和a[j+1],如果a[j] > a[j+1]则交换两个元素的位置;对每一对相邻的元素执行同样操作,从而开始一对到结束一对,在这一步骤完成后最后一个元素就是最大的元素;针对所有的元素重复以上的步骤,除了最后一个;持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。二、算法分析以数组{6, 3, 8, 2, 9, 1}为例...原创 2019-04-12 16:36:29 · 289 阅读 · 0 评论 -
排序算法——快速排序
一、基本原理选择一个基准数,通过一趟排序将比他小的数放在他左边,比他大的数放在他的右边。选择基准数,通常是数列的一个元素;将比基准数小的数放在基准数左边,把比基准数大的数放在基准数的右边,所以基准数放在数列的中间;对“基准数左侧数列”和"基准数右侧数列"执行以上操作。二、算法分析以数组{6, 3, 8, 2, 9, 1}为例:第一轮left = 0, right = 5,i = ...原创 2019-04-13 17:10:28 · 173 阅读 · 0 评论 -
排序算法——插入排序
一、基本原理将一个数插入到已排序好的数列中,从而得到一个新的,个数+1的新的有序数列。二、算法分析以数组{6, 3, 8, 2, 9, 1,7}为例:i = 1:取3插入到有序数列[6]中,得到新的数列:{3, 6, 8, 2, 9, 1,7}i = 2:取8插入到有序数列[3,6]中,得到新的数列:{3, 6, 8, 2, 9, 1,7}i = 3:取2插入到有序数列[3,6,8]...原创 2019-04-16 21:49:47 · 147 阅读 · 0 评论 -
排序算法——希尔排序
一、算法原理希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。二、算法实现public static void main(String[] args) { int arr[]={9,1,5,8,3,7,6}; int d = arr.length; while (d >...原创 2019-04-21 23:39:07 · 126 阅读 · 0 评论 -
排序算法——简单排序算法
一、算法原理通过N-1次遍历,从a[i+1] ~ a[n-1]中选择出最小的数a[j]将这个数设置到i位置。二、算法分析以数组{9,1,5,8,3,7,6}为例第一轮 i = 0,从{9,1,5,8,3,7,6}中找出最小值1,交换位置后:[1, 9, 5, 8, 3, 7, 6]第二轮 i = 1,从{9, 5, 8, 3, 7, 6}中找出最小值3,交换位置后:[1, 3, 5, ...原创 2019-04-22 00:03:09 · 127 阅读 · 0 评论 -
排序算法——快速排序2
一、基本原理选择第一个树作为基准数,通过一趟排序将比他小的数放在他左边,比他大的数放在他的右边。选择第一个数做为基准数p;从数列最后一个开始遍历,找出第一个比基准数小的数,索引为j,从数列第二个开始遍历,找出第一个比基准数大的数,索引为i;交换a[i]和a[j]的值;重复上面步骤直到i >= j,将a[i]和基准数交换位置,这样基准数就调整到数列中间;对“基准数左侧数列”和"基准...原创 2019-04-14 15:11:32 · 372 阅读 · 0 评论