算法导论chapter6 堆排序的代码
按照《算法導論》上的偽代碼實現了,剛開始沒注意index的問題,導致錯誤,看來對于偽代碼實現C還是要注意下啊!!
#include<iostream>
#include <time.h>
using namespace std;
const int n=11;
void print(int *a)
{
??? for(int i = 0; i < 11; ++i)
??? ??? cout << a[i] << " ";
??? cout << endl;
}
void inline my_swap(int &a,int &b)
{
??? int temp = a;
??? a = b;
??? b = temp;
}
void max_heapify(int *a,int i,int n)
{
??? int l = 2*i+1,r = l + 1, largest = i;
??? if(l < n && a[l] > a[i])
??? ??? largest = l;
??? if(r < n && a[r] > a[l])
??? ??? largest = r;
??? if(largest != i)
??? {
??? ??? my_swap(a[largest],a[i]);
??? ??? max_heapify(a,largest,n);
??? }
}
void build_max_heap(int *a,int n)
{
??? for(int i = (n%2==0?n/2-1:n/2); i >= 0; --i)
??? ?? max_heapify(a,i,n);
}
void heapsort(int *a,int n)
{
??? build_max_heap(a,n);
??? cout<<"建立最大堆之后: ";
??? print(a);
??? int size=n;
??? for(int i = n-1; i > 0; --i)
??? {
??? ??? my_swap(a[0],a[i]);
??? ??? --size;
??? ??? max_heapify(a,0,size);
??? }
}
int main()
{
??? srand(time(NULL));
??? int *a = new int[n];
??? for(int i=0;i<n;++i)
??? ??? a[i]=rand();
??? cout<<"建立最大堆之前: ";
??? print(a);
??? heapsort(a,n);
??? cout<<"最大堆排序之后: ";
??? print(a);
}
總結
以上是生活随笔為你收集整理的算法导论chapter6 堆排序的代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 找不到u盘了怎么办 U盘不见了怎么办?
- 下一篇: Apache服务器二级域名的完美实现