C# 堆排序
来源:互联网 发布:新手怎样做好淘宝网店 编辑:程序博客网 时间:2024/05/07 14:16
“堆”定义
n个关键字序列Kl,K2,…,Kn称为(Heap),当且仅当该序列满足如下性质(简称为堆性质):
(1)ki<=k(2i)且ki<=k(2i+1)(1≤i≤ n),当然,这是小根堆,大根堆则换成>=号。//k(i)相当于二叉树的非叶结点,K(2i)则是左孩子,k(2i+1)是右孩子 若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树: 树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。时间复杂度:O(nlogn)
堆排序是就地排序,辅助空间为O(1),
C# Code:
public void HeapSort(int[] arr)
{
//针对非叶子结点进行调整
int i = arr.Length / 2 - 1;
while (i >= 0)
{
HeapAdjust(arr, i, arr.Length);
i--;
}
i = arr.Length - 1;
int temp = 0;
for (i = arr.Length - 1; i > 1; --i)
{
temp = arr[i];
arr[i] = arr[0];
arr[0] = temp;
HeapAdjust(arr, 0, i - 1);
}
}
private void HeapAdjust(int[] arr, int cur, int arrLeng)
{
int temp, child;
int i = arrLeng;
temp = arr[cur];
child = 2 * cur + 1;
while (child < arrLeng)
{
if (child < arrLeng && arr[child] <= arr[child + 1])
child++;
if (temp > arr[child])
break;
arr[cur] = arr[child];
cur = child;
child = 2 * child + 1;
}
arr[cur] = temp;
}
- 堆排序 C#
- C#堆排序
- C# 堆排序
- 堆排序C#实现
- C#实现堆排序
- C#中堆排序记录
- 堆排序,Dijikstra算法和C#
- 堆排序算法(C#实现)
- 堆排序在C#中的实现
- 堆排序——C#实现
- C# 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序
- 数据结构:插入排序/冒泡排序/快速排序/归并排序/堆排序 C#语言实现
- C# 实现常用的算法-- 堆排序(转)
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- Speex 音频编解码
- 病毒式传播2.0时代的社交游戏开发5要素
- 个性彰显时代的轻博客8090S
- mktime
- lua中的类
- C# 堆排序
- 通信面试题目1
- Java中数据库连接池原理机制讲解
- (华电网)通信技术基础知识
- 面试_通信基础类
- fwrite 函数
- hdoj 1864 最大报销额 【DP】【01背包】【水】
- 从网页中爬取小说内容并保存为文本文件的小程序
- quicksort模版