手撕七大排序 (二)

  • 交换排序
    • 一. 冒泡排序
      • 1. 单趟冒泡排序
      • 2. 多趟排序
    • 二. 快速排序
  • 选择排序
    • 一. 选择排序
      • 1. 单趟选择排序
      • 2. 完整选择排序
    • 二. 堆排序

交换排序

一. 冒泡排序

现在我们给大家一个无序数组 要求是我们要将最大的数字放到数组最后面去

这个时候大家应该是怎么想的呢?

  1. 我们可以遍历一遍数组然后找到一个最大的值 放到最后去 (这个我们待会儿讲)
  2. 我们将这个数字和后面的数字进行比较 如果前面的数字比较大 就交换它们 如果不大于 就比较下面的数字和后面的数字 这样比较一趟 最大的数字就到最后面了

我们首先来谢谢单趟冒泡排序的代码

1. 单趟冒泡排序

也就是将一个数字放到最后的冒泡排序

代码表示如下

void Bubblesort1(int* arr, int size)
{// assertassert(arr);// 将最大的数字放到最后面int i = 0;int tmp = 0;for ( i = 0; i < size - 1; i++){// 比较大小if (arr[i]>arr[i+1]){tmp = arr[i];arr[i] = arr[i + 1];arr[i + 1] = tmp;}}
}

我们来看看结果


我们发现可以完美运行

2. 多趟排序

我们想想看 既然每次排序能够将最大的数字放到最后去

我们是不是可以在经过(x-1)次排序之后将x个数字排序完成啊

既然如此 我们开始实现完全体的冒泡排序

代码表示如下

void Bubblesort(int* arr, int size)
{// assertassert(arr);// i表示躺数 j表示每一趟排序需要做的事情 tmp临时变量int i = 0;int j = 0;int tmp = 0;for ( i = 0; i < size-1; i++){for ( j = 0; j < size - 1 - i; j++){if (arr[j] > arr[j + 1]){// 比较if (arr[j]>arr[j+1]){tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}}
}

还是一样我们来看看效果怎么样


可以完美运行

二. 快速排序

这个排序很难 并且会有很多变形

所以我会用单独的一篇博客来介绍

介绍完之后会将连接贴到这篇博客里面

选择排序

一. 选择排序

1. 单趟选择排序

还记不记得我们上面讲的一句话

我们这里设定只要设定一个最大值 依次遍历整个数组 并且在最后将这个最大值放到数字后面就可以

代码表示如下

void selectionsort1(int* arr, int size)
{// assertassert(arr);// 设定一个最大值(下标) 遍历整个数组找到最大的int maxi = 0;int i = 0;for ( i = 0; i < size; i++){if (arr[i] > arr[maxi]){maxi = i;}}// 最后交换位置int tmp = 0;tmp = arr[maxi];arr[maxi] = arr[size - 1];arr[size - 1] = tmp;
}

2. 完整选择排序

跟冒泡排序的思想及其相似

使用i控制排序的次数

使用j来控制每次排序

整体代码如下

void selectionsort(int* arr, int size)
{// assertassert(arr);// 还是一样 i控制多少次 j控制每一次的选择排序int i = 0;int j = 0;int maxi = 0;int tmp = 0;for ( i = 0; i < size-1; i++){for (j = 0; j < size - 1 - i; j++){if (arr[j]>arr[maxi]){maxi = j;}}tmp = arr[size - 1 - i];arr[size - 1 - i] = arr[maxi];arr[maxi] = tmp;}}

二. 堆排序

堆排序已经在前面的博客中介绍了

大家可以参考下我的这篇博客

堆排序

手撕七大排序 (二)相关推荐

  1. 万字手撕七大排序(代码+动图演示)

    万字拿捏七大排序 1.排序的概念及其运用 1.1排序的概念 1.2 排序的运用 1.3 常见的排序算法 2. 常见排序算法的实现 2.1 插入排序 2.1.1 基本思想 2.1.2直接插入排序 2.1 ...

  2. LeetCode912. 排序数组(JavaScript手撕各种排序算法)

    题目链接:https://leetcode-cn.com/problems/sort-an-array/submissions/ 这是一道好题目,可以用来练习手撕各种排序算法,别直接调用api错过了这 ...

  3. [ 数据结构 -- 手撕排序算法第四篇 ] 选择排序

    手撕排序算法系列之第四篇:选择排序. 从本篇文章开始,我会介绍并分析常见的几种排序,大致包括直接插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序等. 大家可以点击此链接阅读其他排序算 ...

  4. [ 数据结构 -- 手撕排序算法第三篇 ] 希尔排序

    手撕排序算法系列之:希尔排序. 从本篇文章开始,我会介绍并分析常见的几种排序,大致包括插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序等. 大家可以点击此链接阅读其他排序算法:排序算 ...

  5. 手撕python_GitHub - caishiqing/manual: 手撕机器学习

    手撕机器学习 用腻了开源框架,尝试下手撕机器学习模型?写这个手撕机器学习系列,旨在不使用任何开源框架的条件下手推实现各种模型,同时保证高性能. Requirements 适用于python2.7与py ...

  6. 手撕代码之七大常用排序算法 | 附完整代码

    点击上方↑↑↑蓝字关注我们~ 「2019 Python开发者日」全日程揭晓,请扫码咨询 ↑↑↑ 0.导语 本节为手撕代码系列之第一弹,主要来手撕排序算法,主要包括以下几大排序算法: 直接插入排序 冒泡 ...

  7. 面试官:手撕十大排序算法,你会几种?

    作者: C you again,从事软件开发 努力在IT搬砖路上的技术小白 公众号: [C you again],分享计算机类毕业设计源码.IT技术文章.游戏源码.网页模板.程序人生等等.公众号回复 ...

  8. 七大排序的个人总结(二) 归并排序(Merge

    七大排序的个人总结(二) 归并排序(Merge  归并排序(Merge Sort): 归并排序是一个相当"稳定"的算法对于其它排序算法,比如希尔排序,快速排序和堆排序而言,这些算法 ...

  9. 详解面试手撕过的那些排序算法

    前言 只要去大厂面试,必定有一轮算法面试,而这一轮往往是阻碍程序员面试成功的关键.一个程序员的算法基本功是否扎实能够体现出自身的开发能力,下面我尽可能的把常用的排序算法讲清楚. 排序简介 排序(Sor ...

最新文章

  1. 浅析cookie以及一些小案例
  2. Android开发之Glide设置View背景图的方法
  3. 小程序支付成功后跳转页面失败
  4. FreeEIM V 2.8.9.8 改善计划
  5. Kylin兼容性问题解决
  6. ROS-Academy-for-Beginners 替换自己的地图模型
  7. 20145233《网络对抗》Exp6 信息收集和漏洞扫描
  8. 数据库可视化软件:Navicat系列
  9. Android开机动画没有声音,Android O 8.0 自定义开机动画/开机铃声
  10. 电脑计算机程序员考证
  11. kali更新grub修复双系统windows10引导启动项
  12. 软件测试周刊(第32期):沙漠中藏着一口井
  13. 华为鸿蒙11公测版,首升鸿蒙2.0系统!华为官宣这10款机型率先公测EMUI11-互联网/电商-文章-小虾米...
  14. U8结账提示出纳系统结账后账务系统才可以结账处理方法
  15. Swift开发 UIColor分类Hex颜色转换
  16. PDF分割成两页怎么弄?来看看这3个工具
  17. 【Java】import org.junit.Test 和@Test报错
  18. 网站搭建:从0到1搭建网站
  19. 数据结构:大学的数据统计
  20. MSP430-USC(二)

热门文章

  1. Linux串口通信之termios结构体
  2. 台式计算机能装蓝牙吗,台式机安装蓝牙方法推荐
  3. 浙江凤凰计划:用新零售模式做资本市场敲门砖
  4. mac清空废纸篓怎么恢复?
  5. 融云钜惠来袭,新客尝鲜首月 2.7 折起,超值套餐 6 折起
  6. java学习--基础知识进阶第七天--HashSet集合、HashMap集合(集合遍历)
  7. 在家月入5q+有手机就能赚米,推荐14个让你在家就能挣米的软件
  8. 【Android SDM660源码分析】- 03 - UEFI XBL GraphicsOutput BMP图片显示流程
  9. PCA主成分分析(原理+例子)
  10. 用项目管理思维做一个活动策划