目录

博文内容:

本讲讲解排序算法里三种基本算法以及它们之间的区别

★博文转载请注明出处。

1. 打擂台算法:

实现步骤:

原理:

代码实现:

运行结果:

2. 冒泡算法实现排序:

冒泡法(也叫做起泡法)基本思路:

规律:

代码实现:

运行结果:

打擂与冒泡:

3. 选择排序

基本思想:

实现过程:

动图展示:

代码实现:

运行结果:

4. 对比总结:

后记:

●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

——By 作者:天空の乌托邦


博文内容:

本讲讲解排序算法里三种基本算法以及它们之间的区别

★博文转载请注明出处。


1. 打擂台算法:

实现步骤:

(1) 确定擂主(首个到场的即为擂主);
(2) 挑战者上台;
(3) 擂主和挑战者比较;挑战者胜的话,挑战者做擂主,否则擂主继续留在台上;
(5) 重复执行(2)~(3) 步骤,直到最后一个挑战者;
(6) 输出最后的擂主。

原理:

打擂台算法的原理是,默认一个值为最大元素,接着与各各元素进行比较,达到寻找最大值的目的

代码实现:

用打擂台法筛选出二维数组的最大值

#include<stdio.h>
#include<stdlib.h>
int main()
{int i, j;int arr[3][3] = { {7,14,15},{14,13,18},{12,19,15} };int max = arr[0][0];//设置擂主for (i = 0;i < 3;i++)for (j = 0;j < 3;j++)if (arr[i][j] > max)max = arr[i][j];//比擂主大就交换擂主printf("请输出最大值为:%d\n", max);return 0;
}

运行结果:

2. 冒泡算法实现排序:

冒泡法(也叫做起泡法)基本思路:

每次将相邻的两个数比较,将较小的那个调到前面。如果有6个数:9,8,5,4,2,0,第一次先将最前面的两个数8和9进行对调。第二次将第2个数和第3个数(9和5)进行对调……如此往复五次就可以得到8,5,4,2,0,9的顺序,可以看到:最大的数9已经“沉底”,成为了最下面的一个数,而小的数开始“上升”,经过第一趟(共5次比较与交换),已经把最大的数9放到了它该在的位置。

如此循环往复,不难发现,我们只需要比较五趟,一趟把一个数放在正确的位置上,而每一趟的比较次数随着趟数的增加而减少。

规律:

我们可以根据上面6个数排序的可以拓展得到:如果有n个数,则要进行(n - 1)趟比较。在第一趟比较中要进行(n - 1)次两两比较,在第 j 趟比较中要进行(n - j)次比较。

代码实现:

//冒泡排序
#include<stdio.h>
int main()
{//先使用数组从终端输入十个数int a[10];int i=0,j=0,t=0;printf("请输入您想要排序的数字:\n");for (i = 0;i < 10;i++){scanf("%d", &a[i]);}printf("\n");//排序过程for (j = 0;j < 9;j++){for (i = 0;i < 9 - j;i++){if (a[i] > a[i + 1]){t = a[i];a[i] = a[i + 1];a[i + 1] = t;}}}printf("排序后结果:\n");//输出十个数for (i = 0;i < 10;i++){printf("%d ", a[i]);}return 0;
}

运行结果:

打擂与冒泡:

其实指定第一个元素为最大元素的打擂台和冒泡法的原理相似,不过打擂台算法并不改变二维数组,只是通过比较将最大元素进行输出赋值给max。


3. 选择排序

基本思想:

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

选择排序的思想其实和冒泡排序有点类似,都是在一次排序后把最小的元素放到最前面,或者将最大值放在最后面。但是过程不同,冒泡排序是通过相邻的比较和交换。而选择排序是通过对整体的选择,每一趟从前往后查找出无序区最小值,将最小值交换至无序区最前面的位置。

----developer1024

实现过程:

1. 第一轮从下标为 1 到下标为 n-1 的元素中选取最小值,若小于第一个数,则交换
2. 第二轮从下标为 2 到下标为 n-1 的元素中选取最小值,若小于第二个数,则交换
        依次类推

动图展示:


动图来自知乎developer1024

红色表示当前最小值,黄色表示已排序序列,绿色表示当前位置。

具体的我们以一组无序数列为例分解说明

来自developer1024

代码实现:

#include <stdio.h>
int main()
{void sort(int array[],int n);int a[10],i;printf("enter array:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);sort(a,10);printf("The sorted array:\n");for(i=0;i<10;i++)printf("%d ",a[i]);printf("\n");return 0;
} void sort(int array[],int n){int i,j,k,t;for(i=0;i<n-1;i++)//趟数{//一趟选出一个最小的数记录k=i;for(j=i+1;j<n;j++)if(array[j]<array[k])k=j;//记录下标t=array[k];array[k]=array[i];array[i]=t;}}

运行结果:

4. 对比总结:

冒泡排序是通过相邻的比较和交换

所谓选择排序就是通过对整体的选择,每一趟从前往后查找出无序区最小值,将最小值交换至无序区最前面的位置。

他们都是在一次排序后把最小的元素放到最前面,或者将最大值放在最后面

而打擂台就是选出一个值,再将其他的数依次和它进行比较


后记:

●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

——By 作者:天空の乌托邦

排序算法之【打擂台算法】【冒泡算法】【选择排序】相关推荐

  1. Java数据结构和算法(三)——冒泡、选择、插入排序算法

    上一篇博客我们实现的数组结构是无序的,也就是纯粹按照插入顺序进行排列,那么如何进行元素排序,本篇博客我们介绍几种简单的排序算法. 回到顶部 1.冒泡排序 这个名词的由来很好理解,一般河水中的冒泡,水底 ...

  2. 排序算法:冒泡排序、插入排序、选择排序、希尔排序

    相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.冒泡排序: 1.算法原理: 冒 ...

  3. JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序)

    JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序) 一. 大O表示法 在进行排序算法之前,我们得先掌握一种对算法效率的表示方法,大O表示法. 我们使用大O表示法来表示算法的时间复杂 ...

  4. 10种排序算法比较(直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、折半插入排序、2路插入排序)

    本文(所有排序算法代码+综合比较代码)链接:https://download.csdn.net/download/qq_39932172/11217572 一.比较目的: 由于<数据结构> ...

  5. 经典排序算法(一) —— Selection Sort 选择排序

    经典排序算法(一) -- Selection Sort 选择排序 文章目录 经典排序算法(一) -- Selection Sort 选择排序 简介 排序过程 实现 复杂度 简介 选择排序是一种简单直观 ...

  6. java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...

    本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...

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

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

  8. c语言选择排序法程序设计,C语言基础之选择排序算法和代码

    在利用C语言进行编写程序的过程中,我们会常常通过算法及其代码来进行相关程序的编写工作.今天课课家笔者先给大家介绍C语言算法中的选择排序算法以及代码.那么到底什么是选择排序算法呢?下面由笔者慢慢道来. ...

  9. java排序算法(插入排序,冒泡排序,选择排序)

    java排序算法(插入排序,冒泡排序,选择排序) 先了解原理,然后自己跟着敲一下,加深印象 CMD编译命令:javac -encoding utf-8 SortList.java && ...

  10. 1. 冒泡与选择排序及其比较

    冒泡排序 1. 思想 冒泡排序(Bubble Sort)是一种交换排序,基本思路是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止. 2. 实现 2.1 初学常用的一种 public ...

最新文章

  1. chrome浏览器解决 跨域调试问题
  2. NAT+VLAN+CHAP实验配置(一)
  3. python手机版下载3.7.2-Python3.5.2
  4. ansible基础配置
  5. 安装meme_我见过的最好JavaScript Meme,详细说明了
  6. 【BZOJ4455】小星星,容斥原理+树形DP
  7. 用winformz时间格式不正确_霜冻不可怕,用生态防寒布正确预防减少损失
  8. 官方版sublime Text3汉化和激活注册码
  9. 使用webstorm操作git
  10. 用友nc 文件服务器,用友NC软件财务部分完整版操作手册(附图片).pdf
  11. 左程云算法Day6 图
  12. 两个PNP三极管组成限流电路原理分析
  13. ps中ppt的尺寸设置
  14. python链接sql报错_python3.7连接sqlserver数据库失败报错20002, DB-Lib error message 20002
  15. global在python中啥意思_Python中global用法详解
  16. 从事热爱的工作和积极乐观
  17. 3.19字节懂车帝一面
  18. 【Android 教程系列第 27 篇】如何使用 Keytool 工具生成 keystore 签名文件
  19. 干货丨千万流量大型分布式系统架构设计实战
  20. 卡片左右滑动 带动任务条滑动 vue

热门文章

  1. TCP/IP 流量解释
  2. 强制安装android软件,求肿么在Android上强制安装某一个软件。我想安装一个软件,但是安装不了,显示应用程序未安装。怎...
  3. Win32 API (3) ZeroMemory,SecureZeroMemory
  4. 芯动联科IPO过会:拟募资10亿 北方电子院与中城创投是股东
  5. 森林资源调查 |基于无人机平台应用激光雷达技术获取树木信息 (包含位置、树高、树冠直径、树冠面积和树冠体积等)
  6. 图文讲解如何使用Gmail绑定域名开通企业邮箱(使用时代互联的域名管理后台)
  7. 二、人脸识别发展状况(论文、综述用)
  8. Java中常用容器类
  9. RabbitMQ 简单入门 (微服务)
  10. GEE:基于变异系数法的遥感环境风险评估指数(RSEI)计算