C# 堆排序 完整代码
2009-07-04 11:30
495 查看
using System;
using System.Collections.Generic;
using System.Text;
namespace MaxHeapSort
{
class Program
{
private static int[] myArray;
private static int arraySize;
//交换数据
static void Exchange(int i,int j)
{
int temp;
temp = myArray[i];
myArray[i] = myArray[j];
myArray[j] = temp;
}
//利用向下遍历节点建立堆
static void TraversingHeap(int vNode)
{
int wNode = 2*vNode + 1; //节点wNode是vNode的第一个子节点
while(wNode<arraySize)
{
//如果vNode 有第二个子节点,将wNode设置成vNode下面最大的子节点
if (wNode + 1 < arraySize)
if (myArray[wNode + 1] > myArray[wNode])
wNode++;
//如果vNode已经是最大,则返回
if(myArray[vNode]>myArray[wNode])
return;
//如果vNode不是,交换vNode和wNode值
Exchange(vNode,wNode);
//继续查找下一个节点
vNode = wNode;
wNode = 2*wNode + 1;
}
}
//建立Heap
static void Buildheap()
{
for(int vNode=arraySize/2-1;vNode>=0;vNode--)
TraversingHeap(vNode);
}
static void HeapSort()
{
Buildheap();
while(arraySize>1)
{
arraySize--;
Exchange(0,arraySize);
TraversingHeap(0);
}
}
static void Main(string[] args)
{
int[] a = {42, 13, 24, 91, 23, 16, 05, 88};
myArray = a;
arraySize = a.Length;
HeapSort();
for(int i=0;i<a.Length;i++)
Console.Write(a[i]+" ");
Console.Read();
}
}
}
using System.Collections.Generic;
using System.Text;
namespace MaxHeapSort
{
class Program
{
private static int[] myArray;
private static int arraySize;
//交换数据
static void Exchange(int i,int j)
{
int temp;
temp = myArray[i];
myArray[i] = myArray[j];
myArray[j] = temp;
}
//利用向下遍历节点建立堆
static void TraversingHeap(int vNode)
{
int wNode = 2*vNode + 1; //节点wNode是vNode的第一个子节点
while(wNode<arraySize)
{
//如果vNode 有第二个子节点,将wNode设置成vNode下面最大的子节点
if (wNode + 1 < arraySize)
if (myArray[wNode + 1] > myArray[wNode])
wNode++;
//如果vNode已经是最大,则返回
if(myArray[vNode]>myArray[wNode])
return;
//如果vNode不是,交换vNode和wNode值
Exchange(vNode,wNode);
//继续查找下一个节点
vNode = wNode;
wNode = 2*wNode + 1;
}
}
//建立Heap
static void Buildheap()
{
for(int vNode=arraySize/2-1;vNode>=0;vNode--)
TraversingHeap(vNode);
}
static void HeapSort()
{
Buildheap();
while(arraySize>1)
{
arraySize--;
Exchange(0,arraySize);
TraversingHeap(0);
}
}
static void Main(string[] args)
{
int[] a = {42, 13, 24, 91, 23, 16, 05, 88};
myArray = a;
arraySize = a.Length;
HeapSort();
for(int i=0;i<a.Length;i++)
Console.Write(a[i]+" ");
Console.Read();
}
}
}
相关文章推荐
- 如何编写出高效的数据库连接池(附带完整代码C#和Java实现)
- 如何编写出高效的数据库连接池(附带完整代码C#和Java实现) .
- [转]C#完整的通信代码(点对点,点对多,同步,异步,UDP,TCP)
- C#完整的通信代码(点对点,点对多,同步,异步,UDP,TCP)
- C#完整的通信代码(点对点,点对多,同步,异步,UDP,TCP)
- C#完整的通信代码(点对点,点对多,同步,异步,UDP,TCP)
- 实现高效的数据库连接池(附带完整代码C#和Java实现)(转)
- C# AccessHelper 完整示例代码
- C#完整的通信代码(点对点,点对多,同步,异步,UDP,TCP)
- C# 调用存储过程简单完整的实例代码
- 模拟登陆网站 之 C#版(内含两种版本的完整的可运行的代码)
- C#完整的通信代码(点对点,点对多,同步,异步,UDP,TCP)
- 自己动手写中文分词解析器完整教程,并对出现的问题进行探讨和解决(附完整c#代码和相关dll文件、txt文件下载)
- 勇敢者论坛完整源代码(asp.net c# SQL 2000)发布--asp.net开源论坛代码
- 实现高效的数据库连接池(附带完整代码C#和Java实现)
- C#完整的通信代码(点对点,点对多,同步,异步,UDP,TCP)
- C#生成漂亮验证码完整代码类
- C#完整的通信代码(点对点,点对多,同步,异步,UDP,TCP)
- windows store app C#读写图像的完整代码
- 堆排序完整代码带详解(续)