堆排序( heap sort )  reference:http://mp.weixin.qq.com/s/mY_bVJPWhzZWL5ZdooA6tw

  1 /* FILE: heapSort.c2  * DATE: 201801163  * --------------4  */5 6 #include <stdio.h>7 8 #define swap(a, b) do{ \9         (a) = (a) ^ (b); \10         (b) = (b) ^ (a); \11         (a) = (a) ^ (b); \12         }while(0)13 14 void heapAdjust(int *array, int parent, int length);15 void heapSort(int *array, int length);16 void print(int *array, int length);17 18 int main(int argc, char *argv[])19 {20         int a[] = {1,3,4,5,2,6,9,7,8,0};21         int len = sizeof(a) / sizeof(a[0]);22         printf("origin: ");23         print(a, len);24         heapSort(a, len);25         printf("heapSort: ");26         print(a, len);27         return 0;28 }29 30 void heapAdjust(int *array, int parent, int length)31 {32         int temp = array[parent];       // 保存当前父节点33         int child = 2 * parent + 1;     // 先获得左孩子34         while(child < length)35         {36                 if(child+1<length && array[child]<array[child+1])37                         child++;38                 // 如果父节点的值已经大于孩子节点的值,则直接结束39                 if(temp >= array[child])40                         break;41                 // 孩子节点的值赋给父节点42                 array[parent] = array[child];43                 parent = child;44                 child = 2 * parent + 1;45         }46         array[parent] = temp;47 }48 49 void heapSort(int *array, int length)50 {51         int i;52         // 循环建立初始堆53         for(i=length/2; i>=0; i--)54         {55                 heapAdjust(array, i, length);56                 printf("initialization: ");57                 print(array, length);58         }59         // n-1次循环完成排序60         for(i=length-1; i>0; i--)61         {62                 // 第一个和最后一个元素交换63                 swap(array[i], array[0]);64                 // 筛选[0]节点,得到i-1个节点的堆65                 heapAdjust(array, 0, i);66                 print(array, length);67         }68 }69 70 void print(int *array, int length)71 {72         int i;73         for(i=0; i<length; i++)74                 printf("%d ", array[i]);75         printf("\n");76 }

快速排序( quick sort )

  1 #include <stdio.h>2 3 #define swap(a, b) do{ \4         (a) = (a) ^ (b); \5         (b) = (b) ^ (a); \6         (a) = (a) ^ (b); \7         }while(0)8 9 void quickSort(int *array, int begin, int end);10 void print(int *array, int length);11 12 int main(int argc, char *argv[])13 {14         int a[] = {2,6,9,1,0,25,6};15         int len = sizeof(a) / sizeof(a[0]);16         print(a, len);17         quickSort(a, 0, len-1);18         print(a, len);19 20         return 0;21 }22 23 void quickSort(int *array, int begin, int end)24 {25         int left = begin;26         int right = end;27         int pivot = array[begin];28         if(begin >= end)29                 return;30         while(left < right)31         {32                 while((left<right) && (array[right] >= pivot))33                         right--;34                 swap(array[right], array[left]);35                 while((left<right) && (array[left] < pivot))36                         left++;37                 swap(array[left], array[right]);38         }39         array[left] = pivot;40         quickSort(array, begin, left-1);        // 递归41         quickSort(array, left+1, end);42 }43 44 void print(int *array, int length)45 {46         int i;47         for(i=0; i<length; i++)48                 printf("%d ", array[i]);49         printf("\n");50 }

(C语言)八大排序之:堆排序、快速排序相关推荐

  1. C语言八大排序算法,附动图和详细代码解释!

    文章来源:电子工程专辑.C语言与程序设计.竹雨听闲 一.前言 如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的. 二. ...

  2. 硬核!C语言八大排序算法,附动图和详细代码解释!

    来源 :C语言与程序设计.竹雨听闲等 一 前言 如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的. 二 八大排序算法 ...

  3. 序列划分c语言,一篇“get”C语言八大排序算法

    如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的. 二.八大排序算法 排序算法作为数据结构的重要部分,系统地学习一下是 ...

  4. “手把手”教你C语言八大排序

    C语言八大排序详解 目录 排序的概念及其应用 常见的八大排序算法 直接插入排序 直接插入排序代码实现 直接插入排序算法时间复杂度及稳定性分析 希尔排序 希尔排序代码实现 希尔排序算法时间复杂度及稳定性 ...

  5. c语言的八大排序算法,程序员的内功:C语言八大排序算法

    四 一.冒泡排序 冒泡排序算法的运作如下: ●比较相邻的元素.如果第一个比第二个大,就交换他们两个. ●对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数. ...

  6. 冒泡和快速排序的时间复杂度_java 八大排序算法 冒泡排序 快速排序 堆排序 归并排序 等...

    八大排序算法 一.直接插入 1.基本思路 在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的.如此反复循环 ...

  7. C语言八大排序算法【详细 代码+图文】

    这里写目录标题 1.冒泡排序 1.1 冒泡排序的思想 1.2 冒泡排序的实现 2.选择排序 2.1 选择排序的思想 2.2 选择排序的实现 3.直接插入排序 3.1 直接插入排序的思想 3.2 直接插 ...

  8. 八大排序算法--堆排序

    序言 对于堆排序的学习,实际上就是对于 堆 这一种数据结构的学习,把堆学会了,堆排序自然也就学会了. 1.为什么使用堆这种数据结构 优先队列是一种很常用的队列,比如在游戏中,游戏角色在自动模式下,如何 ...

  9. 八大排序算法之快速排序(下篇)(快排的优化+非递归快排的实现)

    目录 一.前言 1.快速排序的实现: 快速排序的单趟排序(排升序)(快慢指针法实现):​ 2.未经优化的快排的缺陷 二.快速排序的优化 1.三数取中优化 优化思路: 2. 小区间插入排序优化 小区间插 ...

最新文章

  1. PyTorch神经网络集成技术
  2. poj 1151(线段树求面积并)
  3. 2021云数据库RDS重磅升级发布会
  4. javascript系列之执行上下文
  5. OpenShift 4之评估节点自消耗的系统资源
  6. Markdown 调整图片位置与大小
  7. mysql经典sql语句大全_经典SQL语句大全
  8. 在 Ubuntu 18.04 上安装 Python 3.7
  9. 海康 hikvision SDK 初始化、登录、布防、监听
  10. PPT转换成图片及合成长图
  11. 0x0000000指令引用”0x0000000”内存,该内存不能为written
  12. 不可多求的压电式雨量传感器内部技术问答
  13. Android UI 测试指南之 Espresso
  14. 「 LaTex 」写论文,作者旁添加ORCID
  15. 5G QoS控制原理专题详解-基础概念(3)
  16. veins中实现rsu与车辆通信
  17. 给asus eeepc 1015pw的 1301版本的 bios添加slic2.1
  18. 字符串(varchar)和二进制(varbinary)互转
  19. React 报错与解决方法
  20. 电磁场的概念及常见电磁场产生设备

热门文章

  1. JDK动态代理为什么必须要基于接口?
  2. 永恒之蓝ms17-0109(缓冲区溢出漏洞)
  3. 为了能入职互联网大厂,我有多拼命
  4. 秋冬中式色彩趋势预测之传统美学——曼斯顿墙布墙面装饰创意品牌
  5. 打开doc文档提示Word 遇到问题需要关闭以安全模式启动解决办法
  6. 千匠星云数字化解决方案介绍 | 品牌官网数字化升级解决方案
  7. 数字逻辑组合电路分析练习题
  8. 深圳市工业和信息化局5G产业发展扶持计划操作规程
  9. 《selenium2自动化测试实战-基于python语言》第二遍
  10. 淘宝开放平台接口出租,top平台接口出租,订单R2权限出租,淘宝开放平台R2权限,淘宝开放平台进存销应用出租