堆排序

http://www.inf.fh-flensburg.de/lang/algorithmen/sortieren/heap/heapen.htm(比较好的参考资料)

 1、 堆排序定义
     n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质):
     (1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤ )

     若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。

2、大根堆和小根堆
     根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最小者的堆称为小根堆。
     根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆。
  注意:
     ①堆中任一子树亦是堆。
     ②以上讨论的堆实际上是二叉堆(Binary Heap),类似地可定义k叉堆。

3、堆排序特点
     堆排序(HeapSort)是一树形选择排序。
     堆排序的特点是:在排序过程中,将R[l..n]看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系【参见二叉树的顺序存储结构】,在当前无序区中选择关键字最大(或最小)的记录。

4、堆排序与直接插入排序的区别
     直接选择排序中,为了从R[1..n]中选出关键字最小的记录,必须进行n-1次比较,然后在R[2..n]中选出关键字最小的记录,又需要做n-2次比较。事实上,后面的n-2次比较中,有许多比较可能在前面的n-1次比较中已经做过,但由于前一趟排序时未保留这些比较结果,所以后一趟排序时又重复执行了这些比较操作。
     堆排序可通过树形结构保存部分比较结果,可减少比较次数。
下面是我实现的堆排序
#include <stdio.h>
char buf[20];
//随机生成数组
void ran(int *a)

 for(int i = 0; i < 12; i++)
  a[i] = rand() % 100;;
}
//打印
void print(int *a)

 sprintf(buf,"%18d/n",a[0]);
 puts(buf);
 sprintf(buf,"%10d%16d/n",a[1],a[2]);
 puts(buf);
 sprintf(buf,"%6d%8d%8d%8d/n",a[3],a[4],a[5],a[6]);
 puts(buf);
 sprintf(buf,"%4d%4d%4d%4d%4d/n",a[7],a[8],a[9],a[10],a[11]);
 puts(buf);
}
//建堆
void heaps(int *a,int n)
{
 int id,val;
 id = val = 0;
 for(int i = n/2; i >= 0; i--)
 {
  id = 2*(i+1);
  --id;
  if(id > n) continue;
  if(id+1 <= n)
  {
   if(a[id] < a[id+1]) id++;
  }
  if(a[id]  < a[i]) continue;
  val = a[id];
  a[id] = a[i];
  a[i] = val;  
 }
}

int _tmain(int argc, _TCHAR* argv[])

 int v;
 int a[12];
 ran(a);
 puts("堆排序/n建堆:");
    print(a);
 heaps(a,11);
 print(a);
 for(int i = 1; i < 12; i++)
 {
  v = a[0];
  a[0] = a[12-i];
  a[12-i] = v;
  heaps(a,11-i);
  print(a);
 }
 char cc = getchar();
 return 0;
}
资源下载链接为: https://pan.quark.cn/s/67c535f75d4c 在开发 Vue 项目时,跨域问题是一个常见的挑战,主要是由于浏览器的同源策略限制了不同源之间的请求。本文将介绍几种解决跨域问题的方法,适用于使用 vue-cli 脚手架搭建的项目。 在后端服务器上,可以通过修改响应头来解决跨域问题。例如,在 PHP 中,可以设置 Access-Control-Allow-Origin 为 *,以允许所有来源的请求,同时设置 Access-Control-Allow-Methods 为 POST, GET,以允许跨域的 POST 和 GET 请求。代码示例如下: 在前端开发环境中,可以使用 http-proxy-middleware 来设置代理,从而绕过浏览器的同源策略。在 vue-cli 项目中,打开 config/index.js 文件,并在 proxyTable 对象中添加以下配置: 这样,前端的请求路径以 /api 开头时,http-proxy-middleware 会自动将请求转发到目标地址。 axios 是一个常用的 HTTP 库,用于处理前后端交互。可以在项目的 main.js 文件中全局配置 axios,例如设置 POST 请求的 Content-Type: 在组件中,可以通过 this.$axios 发起请求: Fetch API 是另一种发起 HTTP 请求的方式,同样支持跨域。在 Vue 组件中,可以使用以下代码发起 POST 请求: 如果目标服务器只支持 JSONP,可以使用 jQuery 的 $.ajax 方法,并设置 dataType 为 JSONP。例如: Vue 项目中的跨域问题可以通过调整后端服务器的 Header 或在前端使用 http-proxy-middleware 代理来解决。对于支持 JSONP 的 API,还
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值