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

堆排序 C++

#include #include using namespace std; #define MAXN 10000 #define _cp(a,b) ((a)1&&_cp(e,h[p>>1]);h[p]=h[p>>1],p>>=1);//插入一个元素,并调整堆 h[p]=e; } int del(elem_t& e){//e赋值为堆顶元素,删掉堆顶元素后并重建堆,堆空返回0,否...

堆排序算法(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...

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

这个也不难,把结构设计好

在你的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 显然不是...

个人认为,最大的区别是,冒泡排序是低效的,算法时间复杂度是O(n^2),而堆排序是高效的,算法时间复杂的是O(nlogn)。

C++自带的algorithm库函数中提供了排序算法。自带排序算法的一般形式为:sort(arr+m,arr+n);//将数组arr的下标为m的元素到下标为n-1的元素进行从小到大排序sort(arr+m,arr+n,comp);//与sort(arr+m,arr+n)相比,这个写法可以自己定义排序的规则,...

(1)“冒泡法” 冒泡法大家都较熟悉。其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a[i],则交换它们,一直比较到a[n]。同理对a[1],a[2],...a[n-1]处理,即完成排序。下面列出其代码: void bubble(int *a,int n) /*定义两个参数:数组...

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

#include using namespace std;// 升序数组srcvoid sort(int *src, int len){ int tem; for (int i = 0; i < len; i++) { for (int j = 0; j < len - i - 1; j++) if (src[j] > src[j+1]) { tem = src[j]; src[j] = src[j+1]; src[j+1] = tem; }...

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