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

堆排序 C++

首先,堆是什么?一般的实现中,堆就是数组。上图描述的是在一个数组中建堆的全过程。建堆是自下而上的过程,当上面的建堆过程开始时,下面的堆已经是有序的了。自下而上的过程,通俗的理解就是从数组中间向头部反向遍历,这种方式写成程序足够...

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

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

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

在你的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)。

首先看sort函数见下表: 函数名 功能描述 sort 对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 partial_sort 对给定区间所有元素部分排 partial_sort_copy 对给定区间复制并排序 nth_element 找出给定区间的某个位置对...

#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; }...

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

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