本次排序算法有:

一、冒泡排序 时间复杂度(O(n²))

二、选择排序 时间复杂度(O(n²))

三、插入排序 时间复杂度(O(n²))

四、希尔排序 时间复杂度(O(n²))

五、快速排序 时间复杂度(O(nlog2n)) 最坏是O(n²) 最好O(n) 最坏是当整个数组是逆序排列的时候,如我们需要输出一个升序数组 1 2 3 4 5 6 7 但是输入的数组是 7 6 5 4 3 2 1 这样每次都需要交换比较 时间复杂度就是O(n²)  当输入的数组就是1 2 3 4 5 6 7的时候 快速排序的时间复杂度是O(n) 因为每次都不需要交换,只需要比较 。下面就先给大家展示部分代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;int a[20];
int n;void bobsort(){  //冒泡排序代码for(int i=0;i<n-1;i++){for(int j=0;j<n-i-1;j++){if(a[j]>a[j+1])swap(a[j],a[j+1]);}}
}
void choose(){  //选择排序代码int min_position;for(int i=0;i<n;i++){min_position=i;for(int j=i+1;j<n;j++){if(a[min_position]>a[j])min_position=j;}swap(a[i],a[min_position]);}
}void quick_sort(int begin,int end){  //快速排序代码if(begin>end)return ;int flag=a[begin];int i=begin;int j=end;while(i<j){while(flag<=a[j]&&j>i)j--;a[i]=a[j];while(flag>=a[i]&&j>i)i++;a[j]=a[i];}a[i]=flag;quick_sort(begin,i-1);quick_sort(i+1,end);
}
int main(){cin >> n;for(int i=0;i<n;i++)cin >> a[i];quick_sort(0,n-1);//choose();//bobsort();for(int i=0;i<n;i++)cout << a[i] << endl;
}

首先分析冒泡排序 他的原理其实非常简单,之所以叫他冒泡排序的原因是他每次就选出一个元素,因此称为冒泡排序。比如我们输入 3 2 1 6 5 4 这六个数,冒泡排序的原理就是 首先取出最前面的元素 然后和他后面的一个元素进行对比,在这里就是取前面的3 和后面的2进行对比 如果大于后面的数就把两个数进行交换 交换完之后数组就变成了2 3 1 6 5 4 然后用第二个数和第三个数进行比较 重复第一个操作 再然后 第三个和第四个进行对比,比对完成一个循环之后 最后的一个数就是最大的 之后我们进行下一个循环还是从第一个元素进行比较 仍然进行原来的操作,但这次循环只是循环到最后一个元素的前面一个 因为最后一个经过第一轮操作已经确定是最大的了。之后一直循环 得到正确的数组。

第二个分析插入排序 插入排序就是 从第二个元素开始和前面的比较,如果比前面的大就插入到后面 如果小于前面 就插入到前面 当然 如果前面有许多元素需要一个一个找,找到合适的位置再插入即可。

选择排序的原理和冒泡排序的原理相似,第一次取数组的第一个元素,并把第一个元素设置成最小值,定一个变量记录他的位置,然后依次和后面的所有元素比较,如果有比他小的 记录一下比它小的元素的位置,然后用比它小的元素代替最小值,这样循环完一次之后我们会得到一个最小值还有最小值的位置,然后把最小值和第一个数换一下位置,这样元素第一个数就是最小的了,之后我们进行第二次循环 因为第一次循环已经把第一个位置确定为最小的了,所以第二次循环就从第二个数开始 重复第一次循环的操作,最后 经过循环可以得到一个升序序列。

快速排序的原理就是使用了一个类似于(分割法 我原创的叫法.jpg) 其中的原理就是首先选择一个基准,我们通常认为是序列的第一个数,然后用一个变量保存一下,然后两个变量 low 和high分别从两边往里面收缩,注意先是high移动,寻找到比基准小的数停止循环,然后和low当前指的位置交换,然后从low开始 找到比基准大的停止 把当前位置和high指向的位置交换,然后high继续 直到i=j或者i>j的时候停止 当i=j的时候 把i指向的地方当中分界分成两份 然后那两份依次进行这个操作 一直循环到排序完成。

超级无敌各种排序算法 一个代码解决<可以做后序模板>相关推荐

  1. 有一个List集合,里面存储了5个Student对象。Student有姓名、年龄和成绩属性,按照多个属性进行排序(一行代码解决list对象集合排序问题)。

    有一个List集合,里面存储了5个Student对象.Student有姓名.年龄和成绩属性,按照要求进行排序(一行代码解决list对象集合排序问题). 要求对List集合进行排序,排序规则是: 1.先 ...

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

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

  3. Java几种常见排序算法与代码实现

    前言: 排序算法也算是每年校招.春招.社招都会问到的问题,虽然每次复习了就忘,但是也可以隔一段时间又拿出来看看. 其中,排序方式指,内部还是外部排序.只需要内部内存就可以的称为内部排序,数据量太大需要 ...

  4. 冒泡排序c++代码_八大排序算法(解释+代码+结果+算法优化)

    >>>欢迎点赞,收藏,转发! 评论区获取源代码与更多更全干货!<<< 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,不需要访问外存便能完成 ...

  5. Java常用的八种排序算法与代码实现

    在Java的时候,对于排序的应用需要熟练的掌握,这样才能够确保Java学习时候能够有扎实的基础能力.那Java有哪些排序算法呢?本文小千就来详细说说Java经典的8种排序算法. 经典的排序算法有八种, ...

  6. 程序员面试必备:动图演示十大经典排序算法及代码实现

    0.算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 非比较类排序: ...

  7. 数据结构与算法(三) 排序算法(代码示例)

    数据结构与算法三 排序算法 1. 选择排序 2. 插入排序 3. 冒泡排序 4. 归并排序 5. 快速排序 6. 希尔排序 7. 堆排序 总结 1. 选择排序 选择排序的基本原理: 对于未排序的一组记 ...

  8. java排序算法代码_Java实现八种排序算法(代码详细解释)

    package八大排序算法;importjava.util.Arrays;importorg.junit.Test;/*** 1.插入排序 直接插入排序.希尔排序 折半插入排序 * 2.交换排序 冒泡 ...

  9. PHP 四种基本排序算法的代码实现(2)

    2019独角兽企业重金招聘Python工程师标准>>> 许多人都说算法是程序的核心,算法的好坏决定了程序的质量.作为一个初级phper,虽然很少接触到算法方面的东西.但是对于基本的排 ...

最新文章

  1. bzoj 2326: [HNOI2011]数学作业
  2. Selenium3 + Python3自动化测试系列——多窗口切换
  3. linux tomcat apr安装,Linux下Tomcat安装并开启APR模式-Go语言中文社区
  4. 【BZOJ1079】【codevs2428】着色方案,DP
  5. android thermal 机制,一种系统过热保护机制的实现方法及系统与流程
  6. PHP疗法,人体穴位疗法的秘密-咔咔养生网
  7. 拦截JQuery的ajax
  8. Altium Designer 学习笔记
  9. 锐捷wifi魔盒自动优选服务器,锐捷校园网用python实现自动登录(需要有自己的账号)...
  10. 提高开发效率的 Chrome 开发者工具高端使用技巧(一)
  11. 我的十年十念 ——十年工作感言
  12. 业界安全事件最新动态
  13. csr蓝牙适配 linux,Linux系统下蓝牙立体声配置A2DP profile
  14. 第八届蓝桥杯全国总决赛真题解析
  15. 原来在朋友眼里,我是一个闪闪发光的人
  16. 快速了解机器视觉(CV)基础知识
  17. 马力测试 软件,【图】【分享百公里加速测试软件DYNOLICIOUS】内附楼主的测试结果!...
  18. linux版的百度云怎么样,有些人用Linux版百度网盘不限速,有些则速度很慢
  19. 红外遥控器-IR-linux驱动(基于百问网IMX6ULL_Pro平台)
  20. ML - 贷款用户逾期情况分析5 - 特征工程2(特征选择)

热门文章

  1. 计算机应用基础0039答案,2016秋5205004计算机应用基础-0039【参考答案】
  2. 嵌入式开发之NorFlash 和NandFlash
  3. 统计分析知识之--描述性统计
  4. Flink系列之Flink集群搭建
  5. Java之JDK环境的安装与配置
  6. php artisan实现机制,源码解读:php artisan serve
  7. 谷歌研究员Francois Chollet:有良知的AI研究人员不应该在Facebook工作
  8. 白菜个人导航页2.0
  9. Beat #39;Em Up Game Starter Kit (横版格斗游戏) cocos2d-x游戏源代码
  10. altera fpga 型号说明_Actel与Altera、Xilinx的FPGA选型对比参考