博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Unity][Heap sort]用Unity动态演示堆排序的过程(How Heap Sort Works)
阅读量:6260 次
发布时间:2019-06-22

本文共 2842 字,大约阅读时间需要 9 分钟。

[Unity][Heap sort]用Unity动态演示堆排序的过程

How Heap Sort Works

 

最近做了一个用Unity3D动态演示堆排序过程的程序。

I've made this app to show how heap sort works recently.

效果图(Demo)

一图抵千言。

A picture paints a thousand words.

 

堆排序(Heap Sort)

堆排序总是建立这样一个二叉树:其父结点总大于其子结点。

Step 1: The first step of heap sort is to build a binary tree in which the parent node's value is always greater than its children nodes' value.

首先建堆。

It's called building the heap.

每轮将根结点与最后一个结点互换,然后对剩余部分建堆。

Step 2: Ater that, we swap the root node and the last node that hasn't been swapped yet.

Step 3: build the heap again like in step 1.

Step 4: if not all nodes are swapped in Step 2, goto Step2. Otherwise goto step 5.

Step 5: the heap sort is finished.

1         private static void HeapSortAscending1
(this IList
arr) 2 where T : IComparable 3 { 4 for (int i = arr.Count / 2 - 1; i >= 0; i--) 5 { 6 arr.HeapAdjustAscending1(i, arr.Count); 7 } 8 for (int i = arr.Count - 1; i > 0; i--) 9 {10 T temp = arr[0];11 arr[0] = arr[i];12 arr[i] = temp;13 arr.HeapAdjustAscending1(0, i);14 }15 }16 private static void HeapAdjustAscending1
(this IList
arr, int nonLeafNodeToBeAdjusted, int unRangedCount)17 where T:IComparable18 {19 int leftChild = nonLeafNodeToBeAdjusted * 2 + 1;20 int rightChild = nonLeafNodeToBeAdjusted * 2 + 2;21 int max = nonLeafNodeToBeAdjusted;22 if (nonLeafNodeToBeAdjusted < unRangedCount / 2) // 是非叶节点(None leaf node)23 {24 if (leftChild < unRangedCount && arr[leftChild].CompareTo(arr[max]) > 0)25 { max = leftChild; }26 if (rightChild < unRangedCount && arr[rightChild].CompareTo(arr[max]) > 0)27 { max = rightChild; }28 if (max!=nonLeafNodeToBeAdjusted)29 {30 T temp = arr[max];31 arr[max] = arr[nonLeafNodeToBeAdjusted];32 arr[nonLeafNodeToBeAdjusted] = temp;33 arr.HeapAdjustAscending1(max, unRangedCount);34 }35 }36 }
Heap sort
 

下载(Download)

如需APK安装包,请留言留下您的邮箱。如果需要源码,请捐赠100元并留下您的邮箱。

If you want the HowHeapSortWorks.apk, please leave your email address.

If you want the source code, please kindly donate ¥50 and leave your email adress:)

 

更新(Update)

2015-06-18

增加了'Random array'按钮,用于自动生成15个随机数,方便使用新case。

Added 'Random array' button which generates 15 random numbers as a new test case.

2015-06-21

在下方的数组显示索引。

display index for line nodes.

用表示堆所在层的颜色给下方的数组显示底色。

add background colors for line nodes.

 

转载地址:http://vgqsa.baihongyu.com/

你可能感兴趣的文章
Netty线程模型
查看>>
『Kaggle』Sklearn中几种分类器的调用&词袋建立
查看>>
017_nginx重定向需求
查看>>
[UWP]涨姿势UWP源码——RSS feed的获取和解析
查看>>
判断一个变量是否为空的方法
查看>>
linux 学习一:安装jdk和tomcat
查看>>
[js高手之路]html5 canvas动画教程 - 边界判断与反弹
查看>>
Lua--------------------unity3D与Slua融合使用
查看>>
IP视频通信中的"丢包恢复技术”(LPR)
查看>>
java序列化/反序列化之xstream、protobuf、protostuff 的比较与使用例子
查看>>
xcode编译报错unknown error -1=ffffffffffffffff Command /bin/sh failed with exit code 1
查看>>
linux定时任务crontab设置
查看>>
$.ajax返回的JSON格式的数据后无法执行success的解决方法
查看>>
Android 多媒体MediaPlayer使用详解
查看>>
Golang源码探索(三) GC的实现原理
查看>>
魔方NewLife.Cube升级v2.0
查看>>
Silverlight 引路蜂二维图形库示例:颜色
查看>>
使用PS保存PDF为图片(JPG)
查看>>
40款不容错过的个人摄影设计作品集网站
查看>>
使用 PIVOT 和 UNPIVOT 行转列
查看>>