数据结构c语言版堆排序,c语言数据结构之 堆排序

算法:先生成随机数,赋值到数组,将数组第一个元素a[0]设置为哨兵,函数调用数组和随机数个数n,再设定n/2的根结点与孩子结点进行比较操作,若右孩子存在,则选出三个数里最小的数赋值给根节点,如果右孩子不存在,则只需比较左孩子与根节点大小,一直循环操作至a[1],再从a[2]开始进行根结点与孩子结点进行比较操作,一直到n/2为止,最后,依次输出a[1],输出后将a[n]赋值给a[1];再进行递归操作,重复以上步骤,直至数组为空

要点:画出二叉树是方便理解,并非数据的结构就是如同二叉树那般存储,存储形式还是一排

编译器:VS2013

代码:

#include "stdafx.h"

#include

//函数声明

void HeapSort(int a[],int n); //堆排序(从小到大)

void HSort(int a[], int n);//辅助堆排序

int main()

{

int i,n,a[100];

printf("请输入需要排序元素的个数:");

scanf_s("%d", &n);

printf("随机生成的数组为:");

for (i = 1; i <= n; i++)

{

a[i] = rand() % 100 + 1;

printf("%d ", a[i]);

}

a[i] = '\0';

printf("\n");

HeapSort(a,n);

}

//辅助堆排序(从小到大)

void HSort(int a[], int n)

{

int i = n / 2;

while (i)

{

if (a[2 * i + 1] == '\0')

{

if (a[2 * i] < a[i])

{

a[0] = a[2 * i];

a[2 * i] = a[i];

a[i] = a[0];

}

}

else

{

if (a[2 * i] < a[2 * i + 1])

{

if (a[i] > a[2 * i])

{

a[0] = a[2 * i];

a[2 * i] = a[i];

a[i] = a[0];

}

}

else

{

if (a[i] > a[2 * i + 1])

{

a[0] = a[2 * i + 1];

a[2 * i + 1] = a[i];

a[i] = a[0];

}

}

}

i--;

}

for (i = 2; i <= n / 2; i++)

{

if(a[2 * i + 1] == '\0')

{

if (a[2 * i] < a[i])

{

a[0] = a[2 * i];

a[2 * i] = a[i];

a[i] = a[0];

}

}

else

{

if (a[2 * i] < a[2 * i + 1])

{

if (a[i] > a[2 * i])

{

a[0] = a[2 * i];

a[2 * i] = a[i];

a[i] = a[0];

}

}

else

{

if (a[i] > a[2 * i + 1])

{

a[0] = a[2 * i + 1];

a[2 * i + 1] = a[i];

a[i] = a[0];

}

}

}

}

}

结果

5182bebab1f323ebe23f0d6bcb3da6ba.png

读谭浩强C语言数据结构有感(1)

1.什么是数据结构? 数据结构,就是我们计算机内部的运算,编程语言的基础工作模式吧,个人总结的 = = !! 数据:说简单一点,就是计算机二进制机器码,然后通过一些复杂的操作,变为复杂的语言. 数据元 ...

C语言数据结构----栈与递归

本节主要说程序中的栈函数栈的关系以及栈和递归算法的关系. 一.函数调用时的栈 1.程序调用时的栈是也就是平时所说的函数栈是数据结构的一种应用,函数调用栈一般是从搞地质向低地址增长的,栈顶为内存的低地址 ...

第二章 R语言数据结构

R语言存储数据的结构包括:标量.向量.矩阵.数组.数据框和列表:可以处理的数据类型包括:数值型.字符型.逻辑型.复数型和原生型. 数据结构 向量 向量是用来存储数值型.字符型或逻辑型数据的一维数组.单 ...

C语言---数据结构&lpar;内建,数组,自定义&rpar;

数组是一组有序数据的集合,每个元素都属于同一个数据类型. 一维数组的定义: 类型符  数组名[常量表达式] 常量表达式中,可以包括常量和符号常量,int a[3+5]是合法的.但是不能包含int a[ ...

C语言数据结构之二叉树的实现

本篇博文是博主在学习C语言算法与数据结构的一些应用代码实例,给出了以二叉链表的形式实现二叉树的相关操作.如创建,遍历(先序,中序后序遍历),求树的深度,树的叶子节点数,左右兄弟,父节点. 代码清单如下 ...

&lbrack;C语言&rsqb; 数据结构-预备知识指针

所有的伟大源于一个勇敢的开始 数据结构预备知识 指针 1.指针:是C语言的灵魂,指针=地址 地址:内存单元的编号 指针变量:存放内存单元地址的变量 int *p;//p是指针变量,int *表示该p变 ...

&lbrack;C语言&rsqb; 数据结构-衡量算法的标准

1.衡量算法的标准 算法 解题的方法和步骤 衡量算法的标准 1.时间复杂度 大概程序要执行的次数,而非执行的时间,不同的机器运行时间肯定不一样. 2.空间复杂度 算法执行过程中大概所占用的最大内存 3 ...

C语言数据结构与算法之深度、广度优先搜索

一.深度优先搜索(Depth-First-Search 简称:DFS) 1.1 遍历过程: (1)从图中某个顶点v出发,访问v. (2)找出刚才第一个被顶点访问的邻接点.访问该顶点.以这个顶点为新的顶 ...

C语言数据结构-栈

一.栈的定义 栈(statck)这种数据结构在计算机中是相当出名的.栈中的数据是先进后出的(First In Last Out, FILO).栈只有一个出口,允许新增元素(只能在栈顶上增加). 移出元 ...

随机推荐

添加office权限时找不到ofice&comma;com组件的方法

1.执行 mmc.exe,文件->添加/删除管理单元->可用的管理单元,中选择组件服务->添加->所选单元格 2. 执行dcomcnfg.exe -32,用于64的操作系统

去除Html标签

public static string ParseTags(string Htmlstring)     {         //删除脚本          Htmlstring = Regex.R ...

c&num;安全性、稳定性、高性能需要注重的点

1.弱事件 2.类型安全(包括类型转换时可能的异常) 3.线程安全 5.装箱和拆箱 6.闭包传递局部变量时可能遇到的问题. 7.用于dictionary的键,要同时实现GetHashCode和Equa ...

Java 文件操作大全

Java 文件操作大全 //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if (!myFolderPat ...

div&plus;css 圆角加阴影

.test{ display: inline-block; padding: 5px 10px 6px; text-decoration: none; border-radius: 5px; -moz ...

Linux - 简明Shell编程02 - 变量(Variable)

脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 #!/bin/bash v1=test-variabl ...

【python学习笔记】8&period;异常

[python学习笔记]8.异常 raise Exception: 抛出指定异常 try/except: 捕捉异常 except: 第一个参数是需要捕获的异常类型,可以是多个类型组成元组,第二个参数是 ...

centos文件系统变为只读的解决处理

简单粗暴:重启 Linux系统重启或无故变为只读造成网站无法正常访问的简单临时的做法: 一. 1.mount: 用于查看哪个模块输入只读,一般显示为: /dev/hda1 on / type ext3 ...

vue js实现获取两个日期之间所有日期

https://blog.csdn.net/m0_37852904/article/details/85790793 // 计算续住的总日期列表 getAll(begin, end) { let ar ...

20155320 《Java程序设计》实验五网络编程与安全实验报告

20155320 实验五网络编程与安全实验报告 实验内容 实验一 1.两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/67667 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值