c堆排序
#include<stdio.h>
#include<stdlib.h>
/* p是循环输出的下表*/
int p=;
/*堆调整算法*/
/* r[]数组 , 根结点的编号为k,最后一个结点的编号为m */
void Sift(int r[ ], int k, int m)
{
int i, j, temp;
p++;i = k; j = * i; /* p是循环输出的下表 i是被筛选结点,j是结点i的左孩子*/
while (j <= m) /*筛选还没有进行到叶子*/
{
if (j < m- && r[j] < r[j+]) j++; /*比较i的左右孩子,j指向较大者*/
if (r[i] > r[j]) break; /*根结点大于左右孩子中的较大者*/
else {
temp = r[i]; r[i] = r[j]; r[j] = temp; /*将根结点与结点j交换*/
i = j; j = * i; /*被筛结点位于原来结点j的位置*/
}
}
/*输出每一次 调整的代码*/
printf("NO.%d line:\t", p);
for(i = ; i< ;i++)
{
printf("%3d",r[i]);
}
printf("\n----------------------------------\n");
}
/*堆排序算法*/
void HeapSort(int r[ ], int n) /* r[0]为交换的临时单元*/
{
int i;
/*初始建堆,从最后一个分支结点至根结点*/
for (i = n/; i >= ; i--)
Sift(r, i, n) ;
for (i = ; i < n; i++)
{
r[] = r[]; r[] = r[n-i+]; r[n-i+] = r[]; /*交换r[1]和r[n-i+1]*/
Sift(r, , n-i); /*对r[1]~r[n-i]重建堆*/
}
}
/*主函数*/
int main()
{
int i=;
int r[]={,,,,,,};
/* 排序前的数 */
printf("Heap sort before:");
for(i = ; i< ; i++)
printf("%3d", r[i]);
/* 输出排序后的数 */
printf("\n heap sort after:\n");
HeapSort(r, ); system("color 4E");
system("pause");
return ;
}
c插入排序
#include<stdio.h>
#include<stdlib.h> void InsertSort(int r[ ], int n) /*r[0]用作暂存单元和监视哨*/
{
int i, j;
for (i = ; i <= n; i++)
{
r[] = r[i]; /*暂存待插记录,设置哨兵*/
for (j = i - ; r[] < r[j]; j--) /*寻找插入位置*/
r[j + ] = r[j];
r[j + ] = r[];
}
}
int main()
{
int i;
int r[]={,,,,,,,};
printf("排序之前的元素是");
for(i = ; i< ; i++)
printf("%3d", r[i]);
printf("\n排序后的元素是:");
InsertSort(r, );
for(i = ; i< ;i++)
printf("%3d", r[i]);
return ;
}
c堆排序的更多相关文章
- 算法与数据结构(十四) 堆排序 (Swift 3.0版)
上篇博客主要讲了冒泡排序.插入排序.希尔排序以及选择排序.本篇博客就来讲一下堆排序(Heap Sort).看到堆排序这个名字我们就应该知道这种排序方式的特点,就是利用堆来讲我们的序列进行排序.&quo ...
- [数据结构]——堆(Heap)、堆排序和TopK
堆(heap),是一种特殊的数据结构.之所以特殊,因为堆的形象化是一个棵完全二叉树,并且满足任意节点始终不大于(或者不小于)左右子节点(有别于二叉搜索树Binary Search Tree).其中,前 ...
- 堆排序与优先队列——算法导论(7)
1. 预备知识 (1) 基本概念 如图,(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树.树中的每一个结点对应数组中的一个元素.除了最底层外,该树是完全充满的,而且从左向右填充.堆的数组 ...
- 数据结构:堆排序 (python版) 小顶堆实现从大到小排序 | 大顶堆实现从小到大排序
#!/usr/bin/env python # -*- coding:utf-8 -*- ''' Author: Minion-Xu 小堆序实现从大到小排序,大堆序实现从小到大排序 重点的地方:小堆序 ...
- 堆排序(python实现)
堆排序是利用最大最或最小堆,废话不多说: 先给出几个概念: 二叉树:二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树” 完全二叉树:除最后一层外, ...
- 堆排序分析及php实现
堆排序:是一种特殊形式的选择排序,他是简单选择排序的一种改进. 什么是堆? 具有n个元素的序列:{k1,k2,ki,…,kn} (ki <= k2i,ki <= k2i+1) 或者 (ki ...
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析之后续补充说明(有图有真相)
如果你觉得我的有些话有点唐突,你不理解可以想看看前一篇<C++之冒泡排序.希尔排序.快速排序.插入排序.堆排序.基数排序性能对比分析>. 这几天闲着没事就写了一篇<C++之冒泡排序. ...
- [Unity][Heap sort]用Unity动态演示堆排序的过程(How Heap Sort Works)
[Unity][Heap sort]用Unity动态演示堆排序的过程 How Heap Sort Works 最近做了一个用Unity3D动态演示堆排序过程的程序. I've made this ap ...
- PHP实现堆排序
经验 工作了,面试我工作这家公司时被技术面打击得不行,因为自己的数据结构等基础学得实在太差,虽然原来是想做设计师的说...不过看在PHP写得还凑合的份上能来实习了,但还是决心恶补一下基础. 其实自己之 ...
- 堆排序 Heapsort
Prime + Heap 简直神了 时间优化好多,顺便就把Heapsort给撸了一发 具体看图 Heapsort利用完全二叉树+大(小)顶锥的结构每次将锥定元素和锥最末尾的元素交换 同时大(小)顶锥元 ...
随机推荐
- [翻译]——MySQL 8.0 Histograms
前言: 本文是对这篇博客MySQL 8.0 Histograms的翻译,翻译如有不当的地方,敬请谅解,请尊重原创和翻译劳动成果,转载的时候请注明出处.谢谢! 英文原文地址:https://lefred ...
- AutoCad 二次开发 .net 之创建Table
我使用了COM对象来在cad2018中创建table表格,需要的ObjectArx开发包可以在官网上下载,并且需要使用.netframework4.6的库才行. 项目里除了引用常规的Cad开发dll, ...
- 大厂面试经:说一下你们线上JVM是如何优化的?
JVM(Java虚拟机)简单来说就是运行Java代码的解释器,作为螺丝钉程序员JVM其实了解下就差不多啦,不懂JVM内部细节照样能写出优质的代码!但是一到造火箭.飞机的场景(面试)不懂JVM的你,会被 ...
- git 合并代码
分支 dev 及衍生分支 dev-ctj 一.rebase 1.git checkout dev-ctj 2.git rebase -i head~num[num 是本分支的提交数,多个提交数先合并为 ...
- PHP yaf显示错误提示
PHP yaf显示错误提示 1就是配置文件的那个错误 <pre>error_reporting(E_ALL);</pre> 2init.php文件的<pre>fun ...
- 关闭redis持久化功能
关闭redis持久化功能持久化会报如下信息 会影响硬盘写入性能 所以没什么用 就关掉吧 修改redis配置文件,redis.conf 第115行左右. 1.注释掉原来的持久化规则 <pre> ...
- 20190806-sed面试题
由于比较难,附上PPT,没事还得看 下载:https://www.lanzous.com/i5cs9aj 密码:arka 1.删除centos7系统/etc/grub2.cfg⽂件中所有以空⽩开头的⾏ ...
- sqlite修改表、表字段等与sql server的不同之处
sqlite中只支持 ALTER TABLE 命令的 RENAME TABLE 和 ADD COLUMN. 其他类型的 ALTER TABLE 操作如 DROP COLUMN,ALTER COLUMN ...
- java多线程与线程并发二:线程互斥
本文章内容整理自:张孝祥_Java多线程与并发库高级应用视频教程 当两条线程访问同一个资源时,可能会出现安全隐患.以打印字符串为例,先看下面的代码: // public class Test2 { p ...
- 03-MyBatis拦截器机制
目录 MyBatis拦截器介绍 拦截器的使用 拦截器介绍及配置 源码分析 总结 本文转载自MyBatis拦截器原理探究 MyBatis拦截器介绍 MyBatis提供了一种插件(plugin)的功能,虽 ...