phmg.net
当前位置:首页 >> 堆排序 C++ >>

堆排序 C++

在你的HeapSort应该加一段初始化为最小堆的代码,然后再进入那个for循环。BuildHeap建堆的过程是至上而下的,也就是说j的值变成 2*j或 2*j+1,而不是j/=2. 如果按你这样的方法构建会出现这样的交换过程: 1.8 2 3 1 2.8 1 3 2 3.1 8 3 2 显然不是...

堆排序算法(C++描述) void HeapSort(SeqIAst R) { //对R[1..n]进行堆排序,不妨用R[0]做暂存单元 int i; BuildHeap(R); //将R[1-n]建成初始堆 for(i=n;i>1;i--) { //对当前无序区R[1..i]进行堆排序,共做n-1趟。 R[0]=R[1]; R[1]=R[i]; R[i]=R...

改了下,已正确 #include #include //头文件 #include using namespace std; void main() { double a[]={1.1,4.4,3.3,2.2},b[4]; copy(a,a+4,ostream_iterator(cout," ")); cout

可以把堆看做一个二叉树结构,感觉你这个应该是大根堆,所以根节点是最大的元素。不过不清楚你是以什么方式调整的,是整体调整还是边插入边调整?最好有代码

T自己加一个属性,记录自己原来位置 class T { DATA data; int originaIndex; }

有没有搞错,第五排函数声明在main里面了,还有一些没必要的变量,这不是题目是你自己写的吧?还有这个:d= a[i];a[i]=a[1];a[i]=d;为什么a[i]被连续赋了两遍值...真是神逻辑

忌用消极义

#include #include#include int left(int i){ return 2*i+1;}int right(int i){ return 2*i+2;}void exchange(int & a,int & b){ int temp; temp = a; a = b; b = temp;}void maxHeapify(int arr[], int i, int size){ int l = left(i); int r =...

在C++排序中,最常用、最好用的有 冒泡排序(bubble sort),时间复杂度为O(n^2); 鸡尾酒排序(Cocktail sort,双向的冒泡排序),时间复杂度为O(n^2); 快速排序(Quick sort,是对冒泡排序的一种改进),时间复杂度下界为O(nlogn),最坏情况...

# include # include class node { public: int to,dis; bool operator < (const node &x) const { return disdis[x.to]) continue; for (int i=head[x.to];i!=-1;i=map[i].next) # define S x.to # define T map[i].to # define V map[i].v if ...

网站首页 | 网站地图
All rights reserved Powered by www.phmg.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com