堆排序
2017-10-06 15:04
127 查看
原来最大的敌人一直都是自己,堆排序有那么难吗?竟然胆怯到现在才把它KO了。。。
堆排序:
难点:建堆
时间复杂度:O(nlogn)
空间复杂度:O(1), 就地排序,没有使用额外的存储空间
稳定性:不稳定
特点:不适合待排数据数量少的情况
具体算法流程:见(大话数据结构分析,分析的很好)
代码实现:
#include <iostream>
#include <stdio.h>
using namespace std;
void HeapAjust(int *data,int s,int length){
int j,temp=data[s];
for (j=2*s;j<=length;j*=2)
{
if (j<length && data[j]<data[j+1])//j<m是为了防止溢出
{
j++;
}
if (temp>=data[j])
{
break;
}
data[s]=data[j];
s=j;
}
data[s]=temp;
}
void swap(int *data,int i,int j){
int temp=data[i];
data[i]=data[j];
data[j]=temp;
}
void HeapSort(int *data,int length){
for (int i=length/2;i>0;i--)
{
HeapAjust(data,i,length);
}
for (int i=length;i>0;i--)
{
swap(data,1,i);
HeapAjust(data,1,i-1);
}
}
int main(char* argv[],int argc){
int data[]={-1,50,10,90,30,70,40,80,60,20};
HeapSort(data,9);
for(int i=1;i<10;i++){
cout<<data[i]<<" ";
}
return 0;
}
堆排序:
难点:建堆
时间复杂度:O(nlogn)
空间复杂度:O(1), 就地排序,没有使用额外的存储空间
稳定性:不稳定
特点:不适合待排数据数量少的情况
具体算法流程:见(大话数据结构分析,分析的很好)
代码实现:
#include <iostream>
#include <stdio.h>
using namespace std;
void HeapAjust(int *data,int s,int length){
int j,temp=data[s];
for (j=2*s;j<=length;j*=2)
{
if (j<length && data[j]<data[j+1])//j<m是为了防止溢出
{
j++;
}
if (temp>=data[j])
{
break;
}
data[s]=data[j];
s=j;
}
data[s]=temp;
}
void swap(int *data,int i,int j){
int temp=data[i];
data[i]=data[j];
data[j]=temp;
}
void HeapSort(int *data,int length){
for (int i=length/2;i>0;i--)
{
HeapAjust(data,i,length);
}
for (int i=length;i>0;i--)
{
swap(data,1,i);
HeapAjust(data,1,i-1);
}
}
int main(char* argv[],int argc){
int data[]={-1,50,10,90,30,70,40,80,60,20};
HeapSort(data,9);
for(int i=1;i<10;i++){
cout<<data[i]<<" ";
}
return 0;
}
相关文章推荐
- 堆排序
- 算法导论 之 堆排序[C语言]
- Sort-堆排序
- 选择排序——堆排序
- 堆排序
- 使用堆排序对一组随机数进行排序
- 数据结构-堆排序
- 经典排序算法 - 堆排序Heap sort
- 算法导论6.4-4 所有元素均不相同时,最好情况下,堆排序复杂度为Ω(nlgn)
- 冒泡排序,快速排序,归并排序,选择排序,插入排序,堆排序
- python算法--堆排序详细实现
- 堆的构建与堆排序
- 排序算法总结4-堆排序
- 【算法导论】堆排序
- 关于堆排序建堆时间以及堆排序的分析之暑假学习记录
- heapsort堆排序(3种语言实现 c/java/python)
- 排序之堆排序
- 排序算法c语言描述---堆排序
- 算法导论6:堆排序
- 排序算法之堆排序(二)