博主将代码先撸为敬,具体解释均在代码里面。

一 以表格的形式整体出各经典算法的定义(多个版本)、理解、示例、比较、总结等

--------------------为反馈划下华丽的分割线--------------------

...

------------------------------------------------------------------

二 代码实践

(1)运行结果:

优化后的冒泡排序(升序)

优化后的冒泡排序(降序)

简单选择排序(升序)

直接插入排序(升序)

(2)代码:

#include <iostream>
#include <string>
#include <vector>
#include <array>using namespace std;//用来输出数组
void coutFun(int r[],int n)
{for (int k = 0; k < n; k++)cout << r[k] << endl;cout << "  " << endl;
}//冒泡排序_优化(1)_升序版
void bubbleSort(int r[],int n)//int r[] 的形参 接收 int*的实参???怎么一回事啊???C++直接传递引用 起别名
{int bubbleSort_flag = -1;for (int i = 0; i < n - 1; i++){bubbleSort_flag = 0;//标记排序是否已经提前完成,即数列中的元素是否已经提前有序for (int j = 0; j < n - i - 1; j++)//j < n - i; 会导致r[j + 1]数组下标越界 可以 7 2 8 0 为例 //改为 n-i-1  除去已经排好的大数,找到最大的数进行比较//for (int j = i + 1; j <= n - 1; j++)//这样写少了小的数进行上升 如 7 2 8 0  上面的j < n - i - 1;这种写法表示相对最大的数已经陈到底部,不用去考虑,只需要考虑小的数如何上升就ok了{if (r[j]>r[j + 1]){swap(r[j], r[j + 1]);bubbleSort_flag = 1;}}//假如有N-1趟,假设在第N-5趟排序就已经完成,数列有序,那么bubbleSort_flag = 0 不再进行(N-1)-(N-5) = 4趟的排序if (bubbleSort_flag != 1)break;}//输出数组coutFun(&r[0],n);
}//冒泡排序_优化(2)_Good_倒序版
void bubbleSort2(int r[], int n)
{int bubbleSort_flag2 = -1;//从r[0 1 ... j-1]中找到相对最小的数放到最后 for (int i = n - 1; i > 0; i--){bubbleSort_flag2 = 0;for (int j = 0; j < i; j++){if (r[j] < r[j + 1]){swap(r[j], r[j + 1]);int bubbleSort_flag2 = 1;}}if (bubbleSort_flag2 == 1)break;}//输出数组coutFun(&r[0], n);}//简单选择排序
void selectSort(int r[], int n)
{int min = 0, selectSort_flag = -1;for (int i = 0; i < n - 1; i++){//selectSort_flag = 0;min = i;//关键词:下标   找到最小的那个数的下标 交换到第一个位置上去 以此类推for (int j = i + 1; j <= n - 1; j++){if (r[j] < r[min]){min = j;//selectSort_flag = 1;//这样写其实毫无意义 因为r[i+1 ... n-1]必须与r[min]比较完 选择排序是位置有序 将相对最小的数依次插入}}if (i != min)swap(r[i], r[min]);}//输出数组coutFun(&r[0], n);
}//直接插入排序
//理解上课可等价于线性表的插入
void insertSort(int r[], int n)
{int i, j, temp = 0;for (i = 1; i <= n - 1; i++){temp = r[i];if (r[i - 1] > r[i])//找到 “要插谁”{for (j = i - 1; r[j] > temp; j--)//找到 “插在哪”{r[j + 1] = r[j];}r[j + 1] = temp;}}//输出数组coutFun(&r[0], n);
}int main()
{int flag = 0;//退出循环flag//输入界面//vector类创建动态数组 堆区int n, cmd, *pt_vector;while (1){cout << "0:退出                  1:优化的冒泡排序(1)_升序版" << endl;cout << "2:优化的冒泡排序(2)_Good_倒序版      3:简单选择排序" << endl;cout << "4:直接插入排序           " << endl;cout << "请输入命令(即数字0~4):";cin >> cmd;if (cmd == 0)break;cout << "请输入要排序的数字的个数:";cin >> n;vector<int>r(n);cout << "依次输入需要排序的那" << n << "个数:" << endl;for (int i = 0; i < n; i++)cin >> r[i];cout << endl;pt_vector = &r[0];switch (cmd){case 1:bubbleSort(pt_vector, n); break;//冒泡排序_优化(1)case 2:bubbleSort2(pt_vector, n); break;//冒泡排序_优化(2)_Goodcase 3:selectSort(pt_vector, n); break;//简单选择排序case 4:insertSort(pt_vector, n); break;//直接插入排序}}system("pause");return 0;
}//【01】冒泡排序_优化
/*一维数组大数下沉,小(的)数上浮,故称冒泡。外循环 N个元素N-1趟比较  内循环 相邻两数两两比较,大则交换。
*///【02】简单选择排序
/*选择排序是位置有序 将相对最小的数依次插入各位置
*///【03】直接插入法
/*两个关键,要插谁?插哪里?理解上课可等价于线性表的插入
*/

排序算法-O(n^2)-优化后的冒泡、简单选择、直接插入 代码实践、解释等相关推荐

  1. 基础排序算法详解与优化

    文章图片存储在GitHub,网速不佳的朋友,请看<基础排序算法详解与优化> 或者 来我的技术小站 godbmw.com 1. 谈谈基础排序 常见的基础排序有选择排序.冒泡排序和插入排序.众 ...

  2. 排序算法--快排的优化

    排序算法–快排的优化 下面是我写的一种快排: #include <iostream> #include <stdlib.h>using namespace std;void P ...

  3. 十大经典排序算法之冒泡排序及其优化

    一.冒泡排序 1.冒泡排序算法的原理如下: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大 ...

  4. 【算法之美】不要再用冒泡、选择、插入排序了,丢不起这人!

    文章目录 1. 冒泡排序 2. 选择排序 3. 插入排序 4. 快速排序 5. 堆排列 6. 归并排列 7. 希尔排序 8. 优化后的快排函数sort() 前言 排序算法在算法与数据结构中很常见,在学 ...

  5. 十大经典排序算法之快速排序及其优化

    一.快速排序 1.基本思想: 1.先从数列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边. 3.再对左右区间重复第二步,直到各区间只有一个数. ...

  6. 排序算法入门之冒泡排序优化

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 这篇文章 ...

  7. 【智能优化算法】基于全局优化的改进鸡群算法求解单目标优化问题(ECSO)附matlab代码

    1 简介 智能算法分为两种,一种是群体智能算法(swarmintelligencealgorithm),该算法大多模拟自然界中动植物的特有行为,并将其表达成数学语言,从而进行迭代寻优,如模拟蝙蝠回声定 ...

  8. MATLAB算法实战应用案例精讲-【智能优化算法】斑点鬣狗优化-SHO(附python和matlab代码)

    目录 前言 算法原理 算法思想 1.1包围机制 1.2 狩猎机制 1

  9. 基于对立非洲秃鹫优化算法求解单目标优化问题(OAVOA)含Matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

最新文章

  1. buuctf N种方法解决
  2. python条件表达式连起来写一段话_python学习笔记十三条件表达式应用
  3. SAP S/4HANA里的生产订单,标识其已经结束生产可以发货的字段
  4. linux命令wget多个参数,wget 命令参数使用方法
  5. Linux NAT网络连接权威指南
  6. @Async join
  7. 疫期公共出行更安心 微信支付上线“新冠肺炎保障”
  8. Foxit PDF SDK 下载地址
  9. linkin大话设计模式--命令模式
  10. android-x86 下载地址
  11. 统计学习基础(第二版)——引言
  12. math.js api static function
  13. 携手做大做强中国集成电路产业链
  14. 开源公告|微信云端深度学习推理框架WeChat TFCC开源啦!
  15. app兼容性测试方案
  16. 头条号项目玩法:中视频全方位教学
  17. java 控制台类_Java Console类(控制台)
  18. 【Windows】使用【老毛桃】PE系统进行Windows系统的镜像备份
  19. Unity3D开发之----将预设体Prefab压缩成AssetBundle文件
  20. android 主流机型排行,安卓手机性能排行:华为Mate40 Pro仅排第四,第一名无可撼动...

热门文章

  1. 数据仓库之维表-缓慢变化维
  2. 2021年CCCC天梯赛 【部分题题解】
  3. 共享办公室租赁,拓宽企业资源
  4. 硬件产品的三个验证阶段(EVT/DVT/PVT)
  5. 把bib文件转换成latex中的bibitem的方法
  6. OpenJDK下载地址推荐
  7. Linux下route add 命令添加路由列表
  8. 6.S081——Lab2——system calls
  9. 好久没写随笔了,最近收到朋友转发的一篇文章,心里产生极大共鸣,与大家共享一下~...
  10. 计算机与u盘连接使用,两种解决手机与U盘连接问题的方法!