文章目录

  • 其他排序算法
  • 冒泡排序
    • 算法实现
    • 代码实例
  • 插入排序
    • 算法实现
    • 代码实例
  • 选择排序
    • 算法实现
    • 代码实例

其他排序算法

一学就废的归并排序


冒泡排序

排列顺序从前到后或者从后往前都可,本文选择从后到前的顺序,升序排列:比较相邻两个元素,大的放后面,小的放前面,(降序排列反之)第一个for决定排列数组下标为i的元素,第二个for执行i遍比较过程。
点击这里可以看到动画版的冒泡排序【一个很有趣的网站】


算法实现

void sort(int* a,int len){//冒泡排序,a为数组首地址,len为数组长度int temp;for(size_t i = len; 0 < i; i--){//确定数组下标为i的元素for(size_t j = 0; j < i; j++){//执行i遍比较过程if(a[j+1] < a[j]){temp = a[j+1];a[j+1] = a[j];a[j] = temp;}}}
}

代码实例

#include <iostream>
using namespace std;void sort(int* a,int len){int temp;for(size_t i = len; 0 < i; i--){//冒泡排序for(size_t j = 0; j < i; j++){if(a[j+1] < a[j]){temp = a[j+1];a[j+1] = a[j];a[j] = temp;}}}
}int main(int argc, char const *argv[]) {int n;while (cin>>n,n) {int a[n];for(int i=0;i < n; i++){cin >> a[i];}int len = sizeof(a)/sizeof(a[0]);sort(a,len);for (int i = 0; i < n; i++) {cout << a[i] << " ";}cout << endl;}}

插入排序

排列顺序从前到后或者从后往前都可,本文选择从前到后的顺序,每次要确定的数组元素的值要先存入一个临时变量中(例如下面的temp),再将它之前的元素与它比较,比它大的都往后移动一位(降序排列操作反之),例如:a[7]={1,3,5,2,4,8,7}中,假设此时已经过3轮排序,该执行第4轮排序时,将2赋值给temp,之后将3,5向后移,然后将temp的值赋给a[2],这样就相当于做了一个将2插入1,3之间的操作。每个元素都做这样一个操作之后,整个数组便完成排序了。

ps:上文的网站也可以看插入排序


算法实现

void sort(int* a,int len) {//插入排序,升序排列int temp,i,j;for(i = 1; i < len; i++){//决定第i个元素temp = a[i];//先将要插入的值赋给临时变量防止以数据丢失for(j = i; 0 < j; j--){//执行i遍比较if(temp < a[j-1]){//a[i]之前的元素比temp大的往后移一位a[j] = a[j-1];}else{break;//找到了该插入的位置,退出本层循环,决定下一个元素的位置}}a[j] = temp;//将元素插入到其该存在的位置}
}

代码实例

#include<iostream>
using namespace std;void sort(int* a,int len) {//插入排序,升序排列int temp,i,j;for(i = 1; i < len; i++){//决定第i个元素temp = a[i];for(j = i; 0 < j; j--){//执行i-1遍比较if(temp < a[j-1]){a[j] = a[j-1];}else{break;}}a[j] = temp;}
}int main(int argc, char const *argv[]) {int n;while (cin>>n,n) {int a[n];for(int i=0;i < n; i++){cin >> a[i];}int len = sizeof(a)/sizeof(a[0]);sort(a,len);for (int i = 0; i < n; i++) {cout << a[i] << " ";}cout << endl;}return 0;
}

选择排序

排列顺序从前到后或者从后往前都可,本文选择从前到后的顺序,每次要确定的数组元素的值要先存入一个临时变量中(例如下面的min),再将它之后的元素与它比较,如果某位置的元素比该位置元素值小(降序排列操作反之),则交换两个位置的元素,并更新min的值,例如:a[7]={1,4,5,3,2,8,7}中,假设此时已经过1轮排序,该执行第2轮排序时,将4赋值给min,之后判定到a[3]时,发现min的值大于a[3](4>3),交换a[1]和a[3]的元素,也就是数组变成了a[7]={1,3,5,4,2,8,7},并更新min的值(min = 3),接下来继续往后比较时发现min的值大于a[4] (3>2),则重复之前的操作,交换a[1]与a[4]的内容,也就是数组变成了a[7]={1,2,5,4,3,8,7},并更新min的值(min = 2),之后再无数组元素值小于min,遍历完成,一轮排序结束。每个位置(除了最后一个位置,其他位置排好了之后,最后一个位置的元素自然而然就排好了)都做这样一个操作之后,整个数组便完成排序了。
ps:上文的网站也可以看选择排序


算法实现

void sort(int* a,int len) {//选择排序,升序排列int min,i,j;for(i = 0; i < len-1; i++){//确定数组下标为i的元素min = a[i];//min作为临时变量存储当前最小的值for(j = i+1; j < len; j++){//执行n-i-1遍比较if(min > a[j]){//如果j位置的元素比i位置元素值小,则交换两个位置的元素,并更新min的值a[i] = a[j];a[j] = min;min = a[i];}}}
}

代码实例

#include<iostream>
using namespace std;void sort(int* a,int len) {//选择排序,升序排列int min,i,j;for(i = 0; i < len-1; i++){//确定数组下标为i的元素min = a[i];//min作为临时变量存储当前最小的值for(j = i+1; j < len; j++){//执行n-i-1遍比较if(min > a[j]){a[i] = a[j];a[j] = min;min = a[i];}}}
}int main(int argc, char const *argv[]) {int n;while (cin>>n,n) {int a[n];for(int i=0;i < n; i++){cin >> a[i];}int len = sizeof(a)/sizeof(a[0]);sort(a,len);for (int i = 0; i < n; i++) {cout << a[i] << " ";}cout << endl;}return 0;
}

一学就废的三种简单排序【冒泡、插入、选择】相关推荐

  1. 算法:三种简单排序算法

    排序算法比較常见的有:冒泡排序.简单选择排序.直接插入排序:希尔排序.堆排序.归并排序和高速排序算法等. 今天先学习一下前面三种比較简单的算法.排序的相关概念: ①排序的稳定性:两个或多个元素相等.排 ...

  2. 排序算法(01)— 三种简单排序(冒泡、插入、选择)

    一.概述 排序是数据处理中十分常见且核心的操作,虽说实际项目开发中很小几率会需要我们手动实现,毕竟每种语言的类库中都有n多种关于排序算法的实现.但是了解这些精妙的思想对我们还是大有裨益的. 1.1 排 ...

  3. JS三种简单排序算法

    冒泡排序:最简单.最慢.长度小于7的时候最优  插入排序:比冒泡要快比快速排序和希尔排序慢,数据量小的时候优势大  快速排序:速度很快  //js利用systemSort进行排序 systemSort ...

  4. 三种简单排序算法---冒泡排序,简单选择排序,直接插入排序

    冒泡排序 核心思想:类似水泡一样,一趟比较,通过相邻元素的交换,冒出当前序列的最小值(最大值)到相应位置 复杂度分析 最好的情况:序列本身有序,只要进行n-1次比较,无需交换,时间复杂度为O(n) 最 ...

  5. 简单选择排序_Python3三种简单排序(冒泡、插入、选择)的比较

    冒泡排序 相邻的两个元素对比,大的数后推,遍历整个列表一次后,将最大项以冒泡的方式排列到列表末尾. 简易版冒泡排序示例如下 def bubble(sl): """ 冒泡排 ...

  6. 03、三种简单的计时器

    1.计时器在游戏中的使用次数很多,以下是三种简单的计时器写法 2.代码: 1 using System.Collections; 2 using System.Collections.Generic; ...

  7. ajax--跨域问题及三种简单的解决方案

    ajax--跨域问题及三种简单的解决方案 参考文章: (1)ajax--跨域问题及三种简单的解决方案 (2)https://www.cnblogs.com/ddjps/p/10415052.html ...

  8. python中字符串输出的三种简单方式

    python字符串输出的三种简单方式 第一种: 用'+'号进行字符串的拼接,但只限于字符串,不能进行其他类型的拼接.但是可以进行强制类型转换(字符串的强制转换为str(名字)),再用加号进行拼接. 比 ...

  9. Unity 基础 之 实现枚举(enum/Enum)遍历的三种简单方法(foreach/for)

    Unity 基础 之 实现枚举(enum/Enum)遍历的三种简单方法 目录 Unity 基础 之 实现枚举(enum/Enum)遍历的三种简单方法 一.简单介绍 二.实现原理 三.效果预览 四.实现 ...

最新文章

  1. 【干货分享】可能是东半球最全的.NET Core跨平台微服务学习资源
  2. chrome调试工具常用功能整理
  3. web 静态页面和动态页面的区别
  4. 自学成为动画师?你真的准备好了吗?
  5. 使用C语言----修改密码
  6. php中的解析范围符,PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】...
  7. 推荐——《梦想金山》
  8. 简单免费内网穿透教程,外网快速访问内网群晖/nas/树莓派
  9. 如何在SVN创建分支版本
  10. Android开发之使用贝塞尔曲线实现黏性水珠下拉效果
  11. 第六章、面向对象基础--中(续)构造器、this、包、eclipse的使用
  12. html另存为对话框,前端实现弹出“另存为”对话框的三种方式
  13. CaptureScreenshot
  14. 视频直播流媒体服务器的http-flv是如何直播的?
  15. SML(standard ML)入门学习(1)
  16. 软件行业中的鱼骨图运用
  17. 鸟哥的Linux私房菜-基础学习篇(第四版):鸟哥-电子书
  18. ipaddress 模块介绍
  19. android 多个手指同时点击,处理多点触控手势  |  Android 开发者  |  Android Developers...
  20. 免费DataGridView打印及.NET轻松打印控件(VB打印,C#打印)

热门文章

  1. cpu工作原理flash动画_17张PLC工作原理动画,每一个都是经典
  2. oracle em中查看jiob,HTML5 中的 b/strong、i/em 详解
  3. bbb mmc_blk_probe 分析
  4. asterisk1.8 账号信息mysql存储(动态)
  5. 直连串口线、交叉串口线
  6. jeecgboot前端开发_Jeecg-Boot 技术文档
  7. 图像风格迁移_图像风格迁移—谷歌大脑团队任意图像风格化迁移论文详解
  8. java 匿名内部类 百科_java匿名内部类具体概念是什么,在什么地方用到?
  9. html 遍历div内check,vue+element中checkbox 实现遍历分组全选
  10. arcgis字段计算器利用python按不同两列数据进行编号