c++堆排序算法的实现
来源:互联网 发布:程序员鼓励师是真的吗 编辑:程序博客网 时间:2024/05/18 05:20
//堆排序是一种选择排序,是一种不稳定的排序方法,基本思想是:以小根堆为例,首先,将要排序的数组创建为一个小根堆,然后,将小根堆的堆顶元素和无序区最后一个元素交换,并将无序区最后一个位置放入有序区,然后将新的无序区调整为小根堆。重复上述操作至结束。具体代码实现如下:
#include <iostream>
using namespace ::std;
void MinTop(int number[],int i,int n)
{
int left,right;
left = 2 * i + 1;
right = 2 * i + 2;
int small = i;
if ((n > left) && number[left] < number[i])
{
small = left;
}
if ((n > right) && number[right] < number[small])
{
small = right;
}
if (small != i)
{
int temp = number[i];
number[i] = number[small];
number[small] = temp;
MinTop(number,small,n);
}
}
void BuildHeap(int number[],int n)
{
for (int i = n /2 - 1;i >= 0;i--)
{
MinTop(number,i,n);
}
}
void Heapsort(int number[],int n)
{
BuildHeap(number,n);
for (int i = n - 1;i > 0;i--)
{
int temp = number[0];
number[0] = number[i];
number[i] = temp;
MinTop(number,0,i);
}
}
int main()
{
int *number;
int i = 0,n;
cout<<"请输入排序数据个数:"<<endl;
cin>>n;
number = (int *)malloc(n * sizeof(int));
cout<<"输入待排序数据:"<<endl;
while(i < n)
{
cin>>number[i++];
}
Heapsort(number,n);
cout<<"升序结果如下:"<<endl;
for (i = n - 1;i >= 0;i--)
{
cout<<number[i];
}
cout<<endl;
free(number);
return 0;
}
注:堆排序的时间复杂度为O(n log n),空间复杂度为O(1)。
- 排序算法的C语言实现-堆排序
- 常见排序算法的C语言实现之堆排序
- 堆排序的算法实现(C/C++)
- 排序算法(C实现)--------- 堆排序
- 基于数组的堆排序算法的C语言实现
- 堆排序算法的C/C++语言实现
- 堆排序算法的c/C++语言实现第二部
- [算法练习]堆排序的C语言实现
- 堆排序算法的实现
- 堆排序算法的实现
- 堆排序算法的实现
- 堆排序的算法实现
- 堆排序算法的实现!!
- 堆排序的C实现
- 堆排序的实现(c++)
- 堆排序算法实现(C++)
- 堆排序算法(C & Java 实现)
- c语言 实现堆排序算法
- 开源Web开发资源
- 类设计的5个基本原则
- Jeecg,值得推荐的j2ee快速开发框架
- [raspberry pi] 树莓派 Kernel 编译笔记
- MFC Paint的流程
- c++堆排序算法的实现
- const volatile int i = 10
- eclipse不能自动编译生成class文件的解决办法
- ubuntu 命令行模式和图形界面切换
- wxPython的事件处理
- Redis系列-存储篇sorted set主要操作函数小结
- Android中SQLite应用详解
- ubuntu-12.10-desktop-i386安装注意事项(备忘录)
- 互联网时代的时间管理实践