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,否...

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

数据结构课程设计OK,俺发给你。

在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 ...

#include using namespace std; void merge(int a[],int c[],int l,int mid,int r) { int i=l,j=mid+1,m=1; while (i

建堆是自底向上的且序列位于无序状态,此时除了要选取堆顶元素以外还要保证所有子树的根与左右结点之间符合堆的标准(根是三个结点中取值最小的(小顶堆,降序)/最大的(大顶堆,升序))。 堆调整是自顶向下的序列处于基本有序状态。此时只需...

#include #define NUMBER 20 using namespace std; int main() { int index = 0; int iValue = 0; int strArr[NUMBER]; //产生随机数填充数组 for(;index < NUMBER; ++index) { iValue = rand(); strArr[index] = iValue; } //输出没有排序之前...

排序有多种方法,比如说:冒泡排序,快速排序,插入排序,选择排序,桶排序,堆排序…… 这里我就给一个一般最先学习的冒泡排序给你吧 这一个是排序10个数的,可以根据需要进行修改 #includeusing namespace std;const int n=10;int a[n+1];int ma...

#include #include #include using namespace std; typedef int* IntPtr; void Merge(int A[],int p,int q,int r) { int M=999999999; int n1,n2; n1=q-p+1; n2=r-q; IntPtr L,R; L=new int[n1+1]; R=new int[n2+1]; int i,j,k; for(i=1;i

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