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利用完全二叉树+大(小)顶锥的结构每次将锥定元素和锥最末尾的元素交换 同时大(小)顶锥元 ...
随机推荐
- AtCoder Grand Contest 036 A-C
目录 \(\bf A - Triangle\) \(\bf B - Do\ Not\ Duplicate\) \(\bf C - GP 2\) \(\bf D - Negative \ Cycle\) ...
- 【IOS开发学习—OC篇】
一.instancetype和id关键字的区别 1)instancetype表示方法的返回类型和调用方法的对象类型相同. 2)在Object-C引入instancetype之前,初始化方法的返回类型都 ...
- js的ajax请求
1 js原生get请求 <script> window.onload = function(){ var oBtn = document.getElementById('btn'); oB ...
- 七月月赛T3
题目背景 本题时空限制已经扩大 题目描述 人比人,气死人:鱼比鱼,难死鱼.小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度.参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数 ...
- GO 基础学习笔记(1) | 简介
一.官网查看系列 Golang官网:https://golang.org/ Golang中文网:https://studygolang.com/(推荐) 项目学习网站: https://gowalke ...
- 总结一下 IEnumerable 的例子
本篇将围绕 <试试 IEnumerable 的 10 个小例子>和<试试 IEnumerable 的另外 6 个小例子>给出的例子,总结一下对于 IEnumerable 接口的 ...
- 02. JVM运行机制
JVM运行机制 JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一.JVM启动流程
- python的文件操作及简单的用例
一.python的文件操作介绍 1.文件操作函数介绍 open() 打开一个文件 语法:open(file, mode='r', buffering=-1, encoding=None, errors ...
- 查找文件或目录(find、locate、whereis、which、whatis)
find命令:可以按文件名.文件的类型.用户等条件来递归查找文件或目录 find [路径] [匹配表达式] ,常用选项如下 -name filename 按文件名 -user username ...
- Pashmak and Buses(构造)
题目链接:http://codeforces.com/problemset/problem/459/C 题意:n个人, k辆车, d天,每天将所有 任意人安排到k辆车, 问怎样安排, 可时不存在 2人 ...