排序

冒泡排序

  1. 定义:

  2. 概述:
    冒泡排序中,在每一轮的排序中,总能把最小或是最大的一个数字排到末端,然后下一次就不再次访问这个元素,直至所有元素排列完成。

  3. 代码:

for (int i = 1; i <= (数组大小-1); i++)       //从1开始,到数组-1结束
{for (int j = 0; j < (数组大小-i); j++)   //从0开始,遍历数组,每次两两判断交换,次数每次递减{if (arr[j] < arr[j + 1])                  //(>,<)选择从大到小,或从小到大{temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}
}

时间复杂度最好情况是“O(n)”,最坏情况是“O(n2)”

选择排序

  1. 概述:
    将数组内,每一个元素,与其他元素一一相比,进行排序,暴力排序,就想我从第一个开始,每次将最大或最小放到一端,每一个都比一次,全部比较,然后结束
  2. 代码
    写法一:
 int temp;for (int i = 0; i < 数组大小; i++){for (int j = i; j < 数组大小; j++){if (arr[i] < arr[j]){temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}

写法二:

 int temp;for (int i = 0; i <  数组大小; i++){int k = i;for (int j = i; j <  数组大小; j++){if (arr[j] < arr[k]){k = j;                         //找出最大或最小,记录下标}}temp = arr[i];arr[i] = arr[k];arr[k] = temp;}

时间复杂度O(n2)

附录代码(可直接运行)

#include<iostream>
#include<vector>                              //容器类模板
#include<algorithm>
using namespace std;
//冒泡排序
int bubbleSort(vector<int> &arr)              //引用真实变量地址
{int temp;for (int i = 1; i <= (arr.size() - 1); i++){for (int j = 0; j < (arr.size() - i); j++){if (arr[j] < arr[j + 1]){temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}return 0;
}
//选择排序
int selectSort(vector<int> &arr)              //引用真实变量地址
{int temp;/*//方法一for (int i = 0; i < arr.size(); i++){int k = i;for (int j = i; j < arr.size(); j++){if (arr[j] < arr[k]){k = j;}}temp = arr[i];arr[i] = arr[k];arr[k] = temp;}*///方法二for (int i = 0; i < arr.size(); i++){for (int j = i; j < arr.size(); j++){if (arr[i] < arr[j]){temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}return 0;
}
//sort中的比较函数,利用algorithm中的sort
bool cmpSort(int a, int b)
{return a < b;               //>:是从大到小,<:是从小到大
}
int main()
{int num;vector<int> arr;                     //arr有十个元素,每个值初始化为-1,不写-1默认为0,字符串默认为空//vector<类型> arr{元素1,元素2...};        //初始化方式while(cin >> num){arr.push_back(num);                  //vector尾部添加数字if (cin.get() == '\n')break;}//冒泡排序//bubbleSort(arr);//选择排序//selectSort(arr);//排序函数,需要algorithm头//sort(arr.begin(), arr.end(),cmpSort);for (int i = 0; i < arr.size(); i++){cout << arr[i] << " ";}return 0;
}

vector
1.容器名称.push_back(“元素”) 向vector尾部添加元素
2.容器名称.empty() 判断是否为空
3.容器名称.size() 判断容器中的元素个数

cin不确定数量输入,回车结束

 while(cin >> num){arr.push_back(num);if (cin.get() == '\n')break;     //判断是否输入回车}

参考书籍:算法笔记——胡凡 曾磊

c++简单排序算法(冒泡、选择以及调用algorithm中的sort函数)相关推荐

  1. 算法笔记-排序算法(冒泡 选择 插入)

    首先罗列一下常见的十大排序算法: 一.冒泡排序 1. 定义: 冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则 ...

  2. python sort 部分元素_Python 简单排序算法-选择、冒泡、插入排序实现

    写文章主要是记录自己每天学习的东西,本篇文章主要介绍数据结构中常用的简单的排序算法,虽然这些算法用Python实现起来不是十分的高效,不如c.java之类的运行速度快,应用Python实现主要是为了: ...

  3. php三个数字比较大小排序,php中常用的4种实现数字大小排序的冒泡选择等算法函数代码...

    分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中按照从小到大的顺序进行排序. 本站收录这篇文章php中常用的4种实现数字大小排序的冒泡选择等算法函数代码,详细解说文章中相关排序 冒泡 ...

  4. 【简单排序算法】:简单选择排序、直接插入排序和冒泡排序

    [简单排序算法]:简单选择排序.直接插入排序和冒泡排序 简单选择排序: 原理:设所排序序列的记录个数为n.i取1,2,-,n-1,每次从所有n-i+1个记录(Ri,Ri+1,-,Rn)中找出最小的记录 ...

  5. 数据结构 排序【简单排序(冒泡、插入)、希尔排序、堆排序、排序方法的综合比较、2套 排序汇总代码】

    目   录 第9章 排序(上) 9.1 简单排序(冒泡.插入) 1.前提 2.简单排序(冒泡排序) 3.简单排序(插入排序) 4.时间复杂度下界 9.2 希尔排序 9.3 堆排序 排序方法综合比较 排 ...

  6. 简单排序算法(Java实现)

    简单排序算法:冒泡排序,选择排序,插入排序 一.冒泡排序 1.1 原理: 从第一个数据开始,与第二个数据相比较,如果第二个数据小于第一个数据,则交换两个数据的位置 指针由第一个数据移向第二个数据,第二 ...

  7. 数组专题讲义之简单排序算法

    专题二 简单排序算法 阅读代码,回答下列问题: #include <iostream> using namespace std;const int M = 100; const int N ...

  8. 认识复杂度和简单排序算法

    认识复杂度和简单排序算法 常数时间操作 int a =arr[i]; 是一个常数操作 int b=list.get(i); 不是一个常数操作,为了得到b的值只能从左到右进行遍历,逻辑上是一个线性表示, ...

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

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

最新文章

  1. 合并单元格两行_28 HTML5标签学习——table单元格的合并
  2. springcloud 实战 feign使用中遇到的相关问题
  3. 一个奇怪的sql异常
  4. 使用 Python 5 年后,我转向了Go
  5. mcq 队列_MCQ | 软件生命周期模型
  6. UITableView 重用cell方法edequeueReusableCellWithIdentifier,出现错误
  7. 视频怎么插入慢动作?
  8. mat查找多线程并发下大对象导致的堆内存问题
  9. [渝粤教育] 中国地质大学 计算机图形学(新) 复习题 (2)
  10. LNMP平台部署及应用
  11. 利用maven命令将外部jar包导进maven仓库
  12. java编译过程_Java编译运行过程
  13. restlet Framework2.2和2.3版本的对比
  14. vue 动态的获取屏幕高度
  15. Filco圣手二代双模蓝牙机械键盘的连接方法
  16. 温习linux的常用命令
  17. ca 手机抓包_抓包安卓7以上ca证书安装方法
  18. slot卡槽封装公共组件
  19. [反汇编练习] 160个CrackMe之021
  20. 学习Python的基础,Python的数据类型和变量

热门文章

  1. Berkeley DB 概述
  2. 函数式编程,函数式编程信奉那棵动态的运动树
  3. 案例:模拟京东快递查询
  4. 报名中 | 滴普科技FastData2.0产品升级发布会
  5. 3d游戏项目实训一周总结 2
  6. Nokia 5310手机主题制作
  7. python下载百度音乐
  8. year+“年“+month+“月有“+days+“天“
  9. MySQL8.0版本 function关键字采坑记
  10. 大学内的云计算解决方案