排序算法之堆排序

时间复杂度为O(NlogN)的排序算法有很多。

其中归并算法虽然时间短,但是需要的内存空间很大,因为其不断递归调用自身;而快速排序算法虽然平均情况下所花费时间也很短,但是在极端情况下,其时间复杂度为O(N²)。而堆排序呢,则是综合了这两者的优点,去除了这两者的缺点,所需要的内存空间不大,而且不管在什么情况下,其时间复杂度都为O(NlogN)。

而堆排序也是一种用到数据结构知识的排序算法,可见,数据结构这门课是非常重要的。

#include<iostream> using namespace std; void HeapAdjust(int *Array,int location,int size) {  int lChild = location * 2 + 1;  int rChild = location * 2 + 2;  int max = location;  if(location <= size/2)  {  if(lChild<=size&&Array[lChild]>Array[max])  {  max = lChild;  }  if(rChild<=size&&Array[rChild]>Array[max])  {  max = rChild;  }    if(max!=location)  {  int temp = Array[location];  Array[location] = Array[max];  Array[max] = temp;  HeapAdjust(Array, max, size);  }  } } void BuildHeap(int *Array,int size) {  int i;  for(int i=size/2;i>=0;i--)  {  HeapAdjust(Array,i,size);  } } void HeapSort(int *Array,int size) {  int i;  BuildHeap(Array,size);  for(i=size-1;i>=0;i--)  {  int temp = Array[0];  Array[0] = Array[i];  Array[i] = temp;  HeapAdjust(Array,0,i-1);  } } int main() {  int a[100],size;  while(scanf("%d",&size)==1&&size>0)  {  for(int i=0;i<size;i++)  {  cin>>a[i];  }  HeapSort(a,size);    for(int i=0;i<size;i++)  {  cout<<a[i]<<" ";  }  cout<<endl;  }    return 0; }

    原文作者:排序算法
    原文地址: https://blog.csdn.net/yesyes120/article/details/79091478
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞