用C++实现堆排序
2017-10-23 12:30
155 查看
本文原创,转载请注明出处(羅小亮博客)。如果本文如果有雷同观点,纯属巧合。如果有引述他人成果,必会给出处。
极大堆(排序后从小到大):是具有以下性质的完全二叉树,每个结点的值都大于等于左右结点的值
下面是使用极大堆的方式进行排序,使用极小堆的排序原理差不多。
#include <iostream>
using namespace std;
void HeapAdjust(int a[],int s,int n);
void HeapSort(int a[],int n);
void Swap(int a[],int i,int j);
int main()
{
int a[10]={-1,8,2,1,6,7,9,4,3};
HeapSort(a,10);
for(int i=1;i<10;++i)
cout << a[i];
cout << endl;
system("pause");
return 0;
}
void HeapSort(int a[],int n)
{
int i;
for(i=n/2;i>0;--i)
{
HeapAdjust(a,i,n);//把数组,和结点,和数组长度作为参数
}
for(i=n-1;i>1;--i)
{
Swap(a,1,i);
HeapAdjust(a,1,i-1);
}
}
void Swap(int a[],int i,int j)
{
int temp;
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
void HeapAdjust(int a[],int s,int n)
{
int i;
int temp = a[s];
for(i=2*s;i<=n;i*=2)
{
if(i<n && a[i]<a[i+1])
{
i++;
}
if(temp >= a[i])
break;
a[s]=a[i];
s=i;
}
a[s]=temp;
}
极大堆(排序后从小到大):是具有以下性质的完全二叉树,每个结点的值都大于等于左右结点的值
下面是使用极大堆的方式进行排序,使用极小堆的排序原理差不多。
#include <iostream>
using namespace std;
void HeapAdjust(int a[],int s,int n);
void HeapSort(int a[],int n);
void Swap(int a[],int i,int j);
int main()
{
int a[10]={-1,8,2,1,6,7,9,4,3};
HeapSort(a,10);
for(int i=1;i<10;++i)
cout << a[i];
cout << endl;
system("pause");
return 0;
}
void HeapSort(int a[],int n)
{
int i;
for(i=n/2;i>0;--i)
{
HeapAdjust(a,i,n);//把数组,和结点,和数组长度作为参数
}
for(i=n-1;i>1;--i)
{
Swap(a,1,i);
HeapAdjust(a,1,i-1);
}
}
void Swap(int a[],int i,int j)
{
int temp;
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
void HeapAdjust(int a[],int s,int n)
{
int i;
int temp = a[s];
for(i=2*s;i<=n;i*=2)
{
if(i<n && a[i]<a[i+1])
{
i++;
}
if(temp >= a[i])
break;
a[s]=a[i];
s=i;
}
a[s]=temp;
}
相关文章推荐
- 堆排序 c/c++实现
- c++实现堆排序及运行实例结果
- 堆排序(C++实现)
- C++实现堆排序
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——C++实现
- 算法设计之,堆,堆排序,基于最大堆的最大优先队列的实现(C++实现)
- 算法数据结构C++实现8 堆排序 难点分析
- c++实现最大堆建立(链表结构)和堆排序
- c++实现堆排序及运行实例结果
- 算法思路重新实现-堆排序 中的 C++ & Java
- 堆排序的C++实现
- c++手动和STL实现堆排序
- c++实现最大堆建立(链表结构)和堆排序
- c++实现堆排序及运行实例结果
- 用c++实现堆排序
- c++实现最大堆建立(链表结构)和堆排序
- c++实现堆排序及运行实例结果
- C++实现几种常用的时间复杂度为O(nlogn)的排序方法:归并排序、快速排序、堆排序、希尔排序
- C++实现的堆排序
- 堆排序的C++实现