堆排序
2009-02-18 16:29
169 查看
// 14.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
using namespace std;
void siftdown(int a[],int i,int n)//堆调整函数
{
int j,t;t=a[i];
while((j=2*i+1)<n)
{
if(j<n-1&&a[j]<a[j+1])j++;
if(t<a[j]){a[i]=a[j];i=j;}
else break;
}
a[i]=t;
}
void heap_sort(int a[],int n)//堆排序函数
{
int i,t;
for(i=(n-2)/2;i>=0;i--)siftdown(a,i,n);
for(i=n-1;i>0;i--)
{
t=a[0];a[0]=a[i];a[i]=t;
siftdown(a,0,i);
}
}
int main()
{
int i;
int a[9]={46,26,22,68,48,42,36,84,66};//对该数组元素从大到小排序
heap_sort(a,9);
for(i=0;i<9;i++)cout<<a[i]<<' ';
cout<<endl;
return 0;
}
//
#include "stdafx.h"
#include<iostream>
using namespace std;
void siftdown(int a[],int i,int n)//堆调整函数
{
int j,t;t=a[i];
while((j=2*i+1)<n)
{
if(j<n-1&&a[j]<a[j+1])j++;
if(t<a[j]){a[i]=a[j];i=j;}
else break;
}
a[i]=t;
}
void heap_sort(int a[],int n)//堆排序函数
{
int i,t;
for(i=(n-2)/2;i>=0;i--)siftdown(a,i,n);
for(i=n-1;i>0;i--)
{
t=a[0];a[0]=a[i];a[i]=t;
siftdown(a,0,i);
}
}
int main()
{
int i;
int a[9]={46,26,22,68,48,42,36,84,66};//对该数组元素从大到小排序
heap_sort(a,9);
for(i=0;i<9;i++)cout<<a[i]<<' ';
cout<<endl;
return 0;
}
相关文章推荐
- [Unity][Heap sort]用Unity动态演示堆排序的过程(How Heap Sort Works)
- 排序——堆排序
- Go语言用堆排序的方法进行一千万个int随机数排序.
- java实现堆排序
- 堆排序
- 堆排序(Java实现)
- 算法复习之堆排序
- 堆排序
- 四、堆排序
- 序列——堆排序-大根堆(堆大顶)
- 堆排序(算法导论)
- 堆排序
- 快排与堆排序、归并排序的比较
- 堆与堆排序
- 各种常见的排序,冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序,基数排序,桶排序
- 经典排序算法 -----冒泡排序,插入排序,快速排序,归并排序,堆排序
- 建堆,以及对堆排序
- HeapSort 堆排序 基于伪代码实现
- 数据结构学习笔记5-寻找最小的k个数(选择排序和堆排序)
- 堆排序