Heap Sort - recursion
Heap Sort
- Build a max heap using exsiting array, which is called Heapify
- Swap root with the last element, and re-Heapify the root node
Heapify
Heapify(array, n, i) = 1) compare node[i] with children 2)node[i] is already the largest one, no op. 3) child is largest one, swap, then Heapify(array, n, 2*i + 1 or 2i* + 2)
Code
public class HeapSort
{
/// <summary>
/// Heapify the array
/// </summary>
/// <param name="array">array</param>
/// <param name="n">total size of the heap</param>
/// <param name="i">starting node</param>
public void Heapify(int[] array, int n, int i)
{
int left = *i + ;
int right = *i + ; int largest = i; if (left < n)
{
if (array[left] > array[largest]) // <---- 此处注意,要用array[largest] instead of array[i], 这样我们可以一直跟踪最大的下标, 而不会错误的交换次大的下标
{
largest = left;
}
} if (right < n)
{
if (array[right] > array[largest])
{
largest = right;
}
} if (largest != i)
{
int temp = array[i];
array[i] = array[largest];
array[largest] = temp;
Heapify(array, n, largest);
}
} public void BuildHeap(int[] array)
{
for(int i = array.Length / - ; i >= ; i--)
{
Heapify(array, array.Length, i);
}
} public void Sort(int[] array)
{
if (array == null || array.Length == )
{
return;
} BuildHeap(array); for(int i = array.Length - ; i >= ; i--)
{
Swap(ref array[], ref array[i]);
Heapify(array, i, );
}
} public void Print(int[] array)
{
for(int i = ; i < array.Length; i++)
{
Console.WriteLine(array[i]);
}
} private void Swap(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}
}
Comments
- Heap sort is a in place sort.
- Time complexity is O(NLogN) for Heapify.A quick look over the above algorithm suggests that the running time is
, since each call to Heapify costs
and Build-Heap makes
such calls.
Heap Sort - recursion的更多相关文章
- Insert or Merge && Insertion or Heap Sort
原题连接:https://pta.patest.cn/pta/test/1342/exam/4/question/27102 题目如下: According to Wikipedia: Inserti ...
- [Unity][Heap sort]用Unity动态演示堆排序的过程(How Heap Sort Works)
[Unity][Heap sort]用Unity动态演示堆排序的过程 How Heap Sort Works 最近做了一个用Unity3D动态演示堆排序过程的程序. I've made this ap ...
- PTA Insertion or Heap Sort
According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...
- 09-排序3 Insertion or Heap Sort
和前一题差不多,把归并排序换成了堆排序.要点还是每一次排序进行判断 开始犯了个错误 堆排序该用origin2 结果一直在排序origin ,误导了半天以为是逻辑错误...一直在检查逻辑 建立最大堆 排 ...
- 堆排序 Heap Sort
堆排序虽然叫heap sort,但是和内存上的那个heap并没有实际关系.算法上,堆排序一般使用数组的形式来实现,即binary heap. 我们可以将堆排序所使用的堆int[] heap视为一个完全 ...
- 1098. Insertion or Heap Sort (25)
According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...
- 数据结构 - 堆排序(heap sort) 具体解释 及 代码(C++)
堆排序(heap sort) 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 堆排序包括两个步骤: 第一步: 是建立大顶堆(从大到小排 ...
- 堆排序(Heap Sort)的C语言实现
堆排序(Heap Sort)具体步骤为 将无序序列建成大顶堆(小顶堆):从最后一个非叶子节点开始通过堆调整HeapAdjust()变成小顶堆或大顶堆 将顶部元素与堆尾数组交换,此是末尾元素就是最大值, ...
- Heap Sort
#include<iostream> using namespace std; const int MAX = 1001; int l[MAX]; //Heap Sort void Hea ...
随机推荐
- 【PAT】反转链表
PAT 乙级 1025 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1 → 2 → 3 → 4 → 5 → 6,K 为 3,则输出应该为 3 → ...
- 常见排序算法JAVA实现
1.冒泡排序,时间复杂度:最好:T(n) = O(n) ,情况:T(n) = O(n2) ,平均:T(n) = O(n2) public int[] bubbleSort(int[] nums) { ...
- 怎么让html中 还是显示<button> 而不进行编译
toTXT(str) { var RexStr = /\<|\>|\"|\'|\&| | /g str = str.replace(RexStr, ...
- Angular2+实现右键菜单的重定义--contextmenu
在做需求时用到video这个html5的新增标签,然后公司要求把video的右键屏蔽了去,我在网上找了很久没找到完整的方法来实现这个功能,只能自己摸索着来. 不说废话,先上干货 0.0 video.c ...
- js 调用后台,后台调用js
<html xmlns="http://www.w3.org/1999/xhtml"><head id="Head1" runat=" ...
- s6k0:一种输入法分词关联模型演示
实现:用kotlin.但是考虑到习惯问题,需要借助akka实现erlang的actor,以及rx.java 需求:略 预计:最快两周 保守估计时间:2019年3月左右 优先级:低 加速方法:打饭钱 赞 ...
- Unity中Terrain中刷出的树木模糊解决办法
Billboard Start 该项用于设定摄像机将树渲染为广告牌的距离.
- npx
npx 是什么? npm v5.2.0引入的一条命令(npx),引入这个命令的目的是为了提升开发者使用包内提供的命令行工具的体验. 举例:使用create-react-app创建一个react项目. ...
- Problem 9: Special Pythagorean triplet
flag = 0 for a in range(1,1000): for b in range(a+1,1000): if a*a + b*b == (1000-a-b)**2: print(a,b) ...
- Mvaen仓库文件添加阿里镜像
新手一枚,创建项目的时候下载Jar之类的特别慢,问过前辈才知道要去settings.xml里面增加一个阿里云服务.不添加这个的话是从国外的仓库下载,添加之后就能直接从国内下载了~ 步骤1:找到你的Ma ...