当前位置: 首页 > news >正文

数据结构13:排序

文章目录

  • 简介
  • 冒泡排序
  • 选择排序
  • 插入排序

简介

排序在编程中有着很多的应用,例如中值滤波、求最大值或最小值等。在本节中,我们将对冒泡排序、选择排序和插入排序这三种排序方式进行讲解。

冒泡排序

冒泡排序的主要思想就是两两比较,然后根据数据比较的结果决定是否进行位置交换 ,逐次将每次比较数据中最大或者最小的数据放到对应的位置,最终按照要求的排序起来,其过程如图1所示。
在这里插入图片描述
图1中,原始数据的顺序为1、3、8、4、2,现在按照由小到大的顺序对他们进行排列:
第一次排序,5个数据参与比较,比较4次,将8放到了最后位置;
第二次排序,4个数据参与比较,比较3次,4被放到了8前面的位置;
第三次排序,3个数据参与比较,比较2次,3被放到了4前面的位置;
第四次排序,2个数据参与比较,未发生数据位置变动;
至此,数据排序完成。

代码实现:

int PopSort(int *data, int len)
{//输入检测if (data == NULL || len <2){return -1;}//定义循环变量int i, j;int temp;for (i = 1; i < len; i++){for (j = 0; j < len - i; j++){//判断相邻数据关系,根据关系进行位置交换if (data[j]>data[j + 1]){temp    = data[j];data[j] = data[j + 1];data[j + 1] = temp;}}}
}

选择排序

选择排序的思想是将每次排序先假定一个最大或最小的数据,然后在比较时,与比它大或者比它小的数据,交换位置,逐次完成数据的排序,其过程如图2所示。
在这里插入图片描述
在图2中,原始数据顺序为:1、3、8、4、2,现在按照由小到大的顺序对他们进行排列:
第一次排序,将1假定为最小数据,比较4次,没有位置交换;
第二次排序,将3假定为最小数据,比较3次,与2交换位置;
第三次排序,将8假定为最小数据,比较2次,与3交换位置;
第四次排序,将4假定为最小数据,比较1次,没有位置交换;
至此,数据排序完成。

代码实现:

int SelectSort(int *data, int len)
{//输入检测if (data == NULL || len <2){return -1;}//定义循环变量int i, j;int temp;int min;for (i = 0; i < len; i++){min = i;for (j = i + 1; j < len ; j++){if (data[min] > data[j]){min = j;}}if (min != i){temp = data[min];data[min] = data[i];data[i] = temp;}}return 0;
}

插入排序

插入排序的思想是比较、移位和插入,通过比较和移位将数据插入到有序数组中。下面根据其过程对其进行详细的讲解,其过程如图3所示。
在这里插入图片描述
在图2中,原始数据顺序为:1、3、8、4、2,现在按照由小到大的顺序对他们进行排列:
第一次排序,认为数据1位于有序数列,将3插入到有序数列,3大于1,无需移动和插入;
第二次排序,数据1、3位于有序数列,将8插入到有序数列,8大于3,无需移动和插入;
第三次排序,数据1、3、8位于有序数列,将4插入到有序数列,4小于8但大于3,将8后移一位,将4插入到原来8的位置;
第四次排序,数据1、3、4、8位于有序数列,将2插入到有序数列,2小于3、4、8但大于1,将3、4、8后一位,将2插入到原来3的位置;
至此,数据排序完成。
代码实现:

int InertSort(int *data, int len)
{//输入检测if (data == NULL || len <2){return -1;}//定义循环变量int i, j;int temp;for (i = 1; i<len; i++){temp = data[i];//从待插入组取出第一个元素。 j = i - 1; //i-1即为有序组最后一个元素的下标 //元素判断和后移while (j >= 0 && temp<data[j])  //j>=0对其进行边界限制;第二个为插入判断条件 {data[j + 1] = data[j];//有序组元素向后移动 j--;}data[j + 1] = temp;//将元素插入}return 0;
}

在这里插入图片描述

http://www.dtcms.com/a/528005.html

相关文章:

  • 网站搭建 里短信wordpress acf破解版
  • 【C/C++】数据在内存中的存储
  • 我们项目中如何运用vueuse
  • 【开发者导航】集成多引擎与离线查询的macOS开源翻译工具:Easydict
  • 龙岗客户 IBM x3650 M5服务器system board fault故障,上门快修分享
  • TENGJUN-TYPE-C 24PIN(JX24-BPS015-A)连接器深度技术解析
  • 10.23作业
  • 深入剖析 Vue Router History 路由刷新页面 404 问题:原因与解决之道
  • FreeP2W:一个PDF转Word的CLI工具
  • .NET - .NET Aspire的Command-Line和GitHub Copilot
  • 10月25日
  • 【电玩电脑杂志】超级整理合集PDF
  • 怎样做某个网站有更新的提醒成都网络优化网站
  • 计算机视觉:python车牌识别检测系统 YOLOv8 深度学习pytorch技术 LPRNet车牌识别算法 CCPD2020数据集 ✅
  • Qt 中如何操作 Excel 表格:主流开源库说明介绍与 QXlsx 库应用全解析
  • 基于单片机的全自动洗衣机控制器设计
  • 电子商务网站规划原则教师遭网课入侵直播录屏曝光口
  • 免费发广告网站攀枝花建设集团网站
  • Day 23 机器学习管道 pipeline
  • Vue CLI 插件开发完全指南:从原理到实战
  • Linux中内核和用户空间通信send_uevent函数的实现
  • Python设计模式实战:用Pythonic的方式实现单例、工厂模式
  • 智能规模效应:解读ChatGPT Atlas背后的数据边界之战
  • 网站建设雨点国家防疫政策最新
  • RabbitMQ Unacked 消息深度解析:机制、问题与解决方案
  • LabVIEW超高温高压流变仪开发
  • 理解面向问题域的需求分析(PDOA)方法
  • 肥东住房和城乡建设部网站WordPress国外赚钱
  • Dify从入门到精通 第31天 在 Dify 中构建智能天气查询机器人
  • 【机器人】RViz中LaserScan的参数信息说明