#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堆排序的更多相关文章

  1. 算法与数据结构(十四) 堆排序 (Swift 3.0版)

    上篇博客主要讲了冒泡排序.插入排序.希尔排序以及选择排序.本篇博客就来讲一下堆排序(Heap Sort).看到堆排序这个名字我们就应该知道这种排序方式的特点,就是利用堆来讲我们的序列进行排序.&quo ...

  2. [数据结构]——堆(Heap)、堆排序和TopK

    堆(heap),是一种特殊的数据结构.之所以特殊,因为堆的形象化是一个棵完全二叉树,并且满足任意节点始终不大于(或者不小于)左右子节点(有别于二叉搜索树Binary Search Tree).其中,前 ...

  3. 堆排序与优先队列——算法导论(7)

    1. 预备知识 (1) 基本概念     如图,(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树.树中的每一个结点对应数组中的一个元素.除了最底层外,该树是完全充满的,而且从左向右填充.堆的数组 ...

  4. 数据结构:堆排序 (python版) 小顶堆实现从大到小排序 | 大顶堆实现从小到大排序

    #!/usr/bin/env python # -*- coding:utf-8 -*- ''' Author: Minion-Xu 小堆序实现从大到小排序,大堆序实现从小到大排序 重点的地方:小堆序 ...

  5. 堆排序(python实现)

    堆排序是利用最大最或最小堆,废话不多说: 先给出几个概念: 二叉树:二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树” 完全二叉树:除最后一层外, ...

  6. 堆排序分析及php实现

    堆排序:是一种特殊形式的选择排序,他是简单选择排序的一种改进. 什么是堆? 具有n个元素的序列:{k1,k2,ki,…,kn} (ki <= k2i,ki <= k2i+1) 或者 (ki ...

  7. 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析之后续补充说明(有图有真相)

    如果你觉得我的有些话有点唐突,你不理解可以想看看前一篇<C++之冒泡排序.希尔排序.快速排序.插入排序.堆排序.基数排序性能对比分析>. 这几天闲着没事就写了一篇<C++之冒泡排序. ...

  8. [Unity][Heap sort]用Unity动态演示堆排序的过程(How Heap Sort Works)

    [Unity][Heap sort]用Unity动态演示堆排序的过程 How Heap Sort Works 最近做了一个用Unity3D动态演示堆排序过程的程序. I've made this ap ...

  9. PHP实现堆排序

    经验 工作了,面试我工作这家公司时被技术面打击得不行,因为自己的数据结构等基础学得实在太差,虽然原来是想做设计师的说...不过看在PHP写得还凑合的份上能来实习了,但还是决心恶补一下基础. 其实自己之 ...

  10. 堆排序 Heapsort

    Prime + Heap 简直神了 时间优化好多,顺便就把Heapsort给撸了一发 具体看图 Heapsort利用完全二叉树+大(小)顶锥的结构每次将锥定元素和锥最末尾的元素交换 同时大(小)顶锥元 ...

随机推荐

  1. Node配合WebSocket做多文件下载以及进度回传

    起因 为什么做这个东西,是突然间听一后端同事说起Annie这个东西,发现这个东西下载视频挺方便的,会自动爬取网页中的视频,然后整理成列表.发现用命令执行之后是下面的样子: 心里琢磨了下,整一个界面玩一 ...

  2. 在VMware下的Linux中的RAID10校验位算法下的磁盘管理

    988年由加利福尼亚大学伯克利分校发表的文章首次提到并定义了RAID,当今CPU性能每年可提升30%-50%但硬盘仅提升7%,渐渐的已经成为计算机整体性能的瓶颈,并且为了避免硬盘的突然损坏导致数据丢失 ...

  3. 《Effective Java》 读书笔记(二) 在构造参数过多的时候优先考虑使用构造器

    刚开始看见这个标题的时候,我想到了python可以选择初始化参数的语法,C++.C#能有默认参数. 为什么Java什么都没有~~ 好吧,我们是使用构造器来实现它. 1.当一个类的构造函数需要很多构造函 ...

  4. 用初中数学知识撸一个canvas环形进度条

    周末好,今天给大家带来一款接地气的环形进度条组件vue-awesome-progress.近日被设计小姐姐要求实现这么一个环形进度条效果,大体由四部分组成,分别是底色圆环,进度弧,环内文字,进度圆点. ...

  5. 第一个appium测试用例

    from time import sleep from appium import webdriver import pytest class TestXueqiu: user_profile_id ...

  6. python之变量名

    在python中,变量不需要提前声明,创建时直接对其赋值即可,变量类型由赋给变量的值决定.值得注意的是,一旦创建了一个变量,就需要给该变量赋值. 变量名应严格遵守以下规则: 1.变量名只能包含:字母/ ...

  7. 『题解』Coderforces352A Jeff and Digits

    更好的阅读体验 Portal Portal1: Codeforces Portal2: Luogu Description Jeff's got n cards, each card contains ...

  8. 创建linux系统下的虚拟机

    1.打开VMware软件 2.创建新的虚拟机 3.下一步 4.点击 稍后安装操作系统——下一步 5.选择   其中版本 我的镜像是这个版本所以选择这个 6.下一步  设置虚拟机名称  要保存的位置 7 ...

  9. SD-WAN 本地策略与中心策略配置(三)

    目录 1. Localized Policy配置 2. Centralized Policy配置 3. Application Route and Traffice Policy 1. Localiz ...

  10. mybatis调用mysql的存储过程(procedure),实现查询操作(student表中的某个年级中的总人数 select (1) 或者 select (*))

    step1:在mysql cmd中新建存储过程: drop procedure if exists queryCountByGrade ; delimiter // -- 定义存储过程结束符号为// ...