可爱的皮卡丘 (#^.^#)

文章目录

  • 一、归并排序

    • 1.归并排序概念
    • 2.例题讲解
  • 二、堆排序
    • 1.堆排序概念
    • 2.堆排序的算法步骤
    • 3.例题详解

一、归并排序

1.归并排序概念


归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治策略。

其分并过程

合并解读:


2.例题讲解


代码过程

#include<stdio.h>
void Merge(int a[], int start, int mid, int end,int c[])//将任意两个有序数组合并排序{int k = 0,i = start,j = mid + 1;while (i <= mid && j <= end) {if (a[i] < a[j]){c[k++] = a[i++];}else{c[k++] = a[j++];}}if (i == mid + 1) {while(j <= end)c[k++] = a[j++];}if (j == end + 1) {while (i <= mid)c[k++] = a[i++];}for (j = 0, i = start ; j < k; i++, j++) {a[i] = c[j];}
}void Merge_Sort(int a[], int start, int end,int c[])//将{if (start >= end)return;int mid = ( start + end ) / 2;//取中间的值,Merge_Sort(a, start, mid,c);Merge_Sort(a, mid + 1, end,c);Merge(a, start, mid, end,c);
}int main()
{int a[] = {7,0,5,4,1,3,2,6};int c[100];Merge_Sort(a, 0,8,c);for(int i=0;i<8;++i){printf("%d ",a[i]);}return 0;
}

结果演示:

、堆排序


1.堆排序的概念


堆排序(Heapsort)是指利用堆积树这种数据结构所设计的一种排序算法。堆的两个的性质:

(1)堆中某个结点的值总是小于等于或大于等于其父结点的值;

(2)堆总是一棵完全二叉树.

在堆排序中将其分为两类:

(1)大顶堆:每个节点的值都大于或等于其子节点的值;

(2)小顶堆:每个节点的值都小于或等于其子节点的值。

用简单的公式表示为:

(1)大顶堆:a[i]>= a[2i+1] && a[i]>=a[2i+2]

(2)小顶堆:a[i]<= a[2i+1] && a[i]<=a[2i+2]

堆排序的平均时间复杂度为 Ο(nlogn)。

2.堆排序的算法步骤


先创建一个堆 H[0……n-1],再将堆首最大值(堆顶)和堆尾互换,此时的堆尾为最大值,然后将剩余的n-1个元素,再重新构造成一堆,重复上述操作,最后课得到一个有序序列。

3.例题详解


对数组a[ ]={8,9,2,1,0,3,16, 4, 7,10,13,12,15,5,14}进行排序,使其成为递增序列。

#include <stdio.h>
void swap(int *a, int *b) {int temp = *b;*b = *a;*a = temp;
}void MAX(int a[], int start, int end) {int child,parents;for(parents=start,child=2*parents+1;child<=end;parents=child,child=2*parents+1){ if (child + 1 <= end && a[child] < a[child + 1]) child++;if (a[parents] <a[child]){swap(&a[parents], &a[child]);} else { break; }}
}
void heap_sort(int a[], int n) {int i;for (i = n / 2 - 1; i >= 0; i--)MAX(a, i, n - 1);for (i = n- 1; i > 0; i--) {swap(&a[0], &a[i]);MAX(a, 0, i - 1);}
}
int main() {int a[] = {8,9,2,1,0,3,16, 4, 7,10,13,12,15,5,14};int N = (int) sizeof(a) / sizeof(*a);heap_sort(a, N);int i;for (i = 0; i < N; i++)printf("%d ", a[i]);printf("\n");return 0;
}

结果演示:

归并排序和堆排序讲解相关推荐

  1. 堆排序时间复杂度_leetcode刷题(二):排序算法(归并排序,堆排序,桶排序)...

    今天,我们要来讲讲排序问题,这次讲的排序算法主要是归并排序,堆排序和桶排序. 归并排序 归并一词在中文的含义就是"合并,并入"的意思,在数据结构里面就是将两个或者两个以上的有序数组 ...

  2. 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序

    这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插入排序 ...

  3. C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】

    目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...

  4. 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结

    一.快速排序的基本思想     设当前待排序的无序区为R[low..high],利用分治法可将快速排序的基本思想描述为: ①分解:     在R[low..high]中任选一个记录作为基准(Pivot ...

  5. 【转】排序算法复习(Java实现) (二): 归并排序,堆排序,桶式排序,基数排序...

    http://www.blogjava.net/javacap/archive/2007/12/14/167618.html 六 归并排序 算法思想是每次把待排序列分成两部分,分别对这两部分递归地用归 ...

  6. python学习-综合练习七(二分查找(递归)、线性查找、插入排序、快速排序、选择排序、冒泡排序、归并排序、堆排序)-实例

    文章目录 二分查找 线性查找 插入排序 快速排序 选择排序 冒泡排序 归并排序 堆排序 推荐代码一 推荐代码二 希尔排序 拓扑排序 说明:本篇博文的知识点大部分来自 Python3 实例 二分查找 二 ...

  7. 选择排序、冒泡排序、插入排序、快速排序、希尔排序、归并排序、堆排序和希尔排序的java实现比较

    几种排序实现代码 package com.delicacy.oatmeal.test.suanfa.sort;import java.util.Arrays; import java.util.Ran ...

  8. 十大排序算法详解(二)归并排序、堆排序、计数排序、桶排序、基数排序

    文章目录 一.归并排序 1.1 归并排序基础[必会知识] 1.1.1 递归实现 1.1.2 非递归实现 1.2 归并排序优化 1.2.1 小数组使用插入排序 1.2.2 避免多余比较 1.2.3 节省 ...

  9. 九大内部排序算法(快速排序、归并排序、堆排序、希尔排序、基数排序)

    排序(Sorting)是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列. 文章目录 由于待排序的记录数量不同,使得排序过程中涉及的存储器 ...

最新文章

  1. Google Instant 瞬时搜索上手指南
  2. 2013 Multi-University Training Contest 5 部分解题报告
  3. 2021年春季学期-信号与系统-第十二次作业参考答案-第一小题
  4. 关于Advertising Campaign
  5. Spring 详解(四):Spring MVC
  6. crf linux使用教程,Linux下CRF++的使用
  7. 随记:Linux下LVM安装配置及使用
  8. 软件测试简历常见问题
  9. 多个485串联_让RS-485接口远离EMI风险!这有三个实用方案
  10. PCB天线设计及射频布局设计指南
  11. ActiveMQ--CVE-2015-5254
  12. 通过PS制作逼真的车窗玻璃雨滴效果
  13. syslinux 的EFI启动以及中文菜单
  14. 扩展卢卡斯 (板子)
  15. SSMS 18 安装过程中出现严重错误
  16. 【unity 保卫星城】--- 开发笔记03(飞机类第一版)
  17. Centos7下安装VScode
  18. 灰狼算法(GWO)优化长短期记忆神经网络的数据回归预测,GWO-LSTM回归预测,多输入单输出模型。
  19. gitbook安装使用看完这一篇就够了
  20. MapGis 二次开发 常见问题 转

热门文章

  1. 简化生活之让AI以指定格式输出
  2. 交换机的端口模式:access 、trunk和hybrid
  3. antDesign踩坑<input>onChange事件 e.target为null
  4. html已输入字数,检测用户输入字数.html
  5. 幼教行业-龙头也摸不到路子
  6. 地磅称重管理电脑鼠标乱跳的解决方案
  7. 2018寒假训练第一场——吃鸡跑毒篇
  8. 烧屏问题难以解决,或成为LG推广OLED的重要障碍
  9. VS2008C#Sqlserver2008数据库的连接,增删改查
  10. 互联网+企业行动指南(读书笔记)