超级无敌各种排序算法 一个代码解决<可以做后序模板>
本次排序算法有:
一、冒泡排序 时间复杂度(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指向的地方当中分界分成两份 然后那两份依次进行这个操作 一直循环到排序完成。
超级无敌各种排序算法 一个代码解决<可以做后序模板>相关推荐
- 有一个List集合,里面存储了5个Student对象。Student有姓名、年龄和成绩属性,按照多个属性进行排序(一行代码解决list对象集合排序问题)。
有一个List集合,里面存储了5个Student对象.Student有姓名.年龄和成绩属性,按照要求进行排序(一行代码解决list对象集合排序问题). 要求对List集合进行排序,排序规则是: 1.先 ...
- c语言选择排序法程序设计,C语言基础之选择排序算法和代码
在利用C语言进行编写程序的过程中,我们会常常通过算法及其代码来进行相关程序的编写工作.今天课课家笔者先给大家介绍C语言算法中的选择排序算法以及代码.那么到底什么是选择排序算法呢?下面由笔者慢慢道来. ...
- Java几种常见排序算法与代码实现
前言: 排序算法也算是每年校招.春招.社招都会问到的问题,虽然每次复习了就忘,但是也可以隔一段时间又拿出来看看. 其中,排序方式指,内部还是外部排序.只需要内部内存就可以的称为内部排序,数据量太大需要 ...
- 冒泡排序c++代码_八大排序算法(解释+代码+结果+算法优化)
>>>欢迎点赞,收藏,转发! 评论区获取源代码与更多更全干货!<<< 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,不需要访问外存便能完成 ...
- Java常用的八种排序算法与代码实现
在Java的时候,对于排序的应用需要熟练的掌握,这样才能够确保Java学习时候能够有扎实的基础能力.那Java有哪些排序算法呢?本文小千就来详细说说Java经典的8种排序算法. 经典的排序算法有八种, ...
- 程序员面试必备:动图演示十大经典排序算法及代码实现
0.算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 非比较类排序: ...
- 数据结构与算法(三) 排序算法(代码示例)
数据结构与算法三 排序算法 1. 选择排序 2. 插入排序 3. 冒泡排序 4. 归并排序 5. 快速排序 6. 希尔排序 7. 堆排序 总结 1. 选择排序 选择排序的基本原理: 对于未排序的一组记 ...
- java排序算法代码_Java实现八种排序算法(代码详细解释)
package八大排序算法;importjava.util.Arrays;importorg.junit.Test;/*** 1.插入排序 直接插入排序.希尔排序 折半插入排序 * 2.交换排序 冒泡 ...
- PHP 四种基本排序算法的代码实现(2)
2019独角兽企业重金招聘Python工程师标准>>> 许多人都说算法是程序的核心,算法的好坏决定了程序的质量.作为一个初级phper,虽然很少接触到算法方面的东西.但是对于基本的排 ...
最新文章
- bzoj 2326: [HNOI2011]数学作业
- Selenium3 + Python3自动化测试系列——多窗口切换
- linux tomcat apr安装,Linux下Tomcat安装并开启APR模式-Go语言中文社区
- 【BZOJ1079】【codevs2428】着色方案,DP
- android thermal 机制,一种系统过热保护机制的实现方法及系统与流程
- PHP疗法,人体穴位疗法的秘密-咔咔养生网
- 拦截JQuery的ajax
- Altium Designer 学习笔记
- 锐捷wifi魔盒自动优选服务器,锐捷校园网用python实现自动登录(需要有自己的账号)...
- 提高开发效率的 Chrome 开发者工具高端使用技巧(一)
- 我的十年十念 ——十年工作感言
- 业界安全事件最新动态
- csr蓝牙适配 linux,Linux系统下蓝牙立体声配置A2DP profile
- 第八届蓝桥杯全国总决赛真题解析
- 原来在朋友眼里,我是一个闪闪发光的人
- 快速了解机器视觉(CV)基础知识
- 马力测试 软件,【图】【分享百公里加速测试软件DYNOLICIOUS】内附楼主的测试结果!...
- linux版的百度云怎么样,有些人用Linux版百度网盘不限速,有些则速度很慢
- 红外遥控器-IR-linux驱动(基于百问网IMX6ULL_Pro平台)
- ML - 贷款用户逾期情况分析5 - 特征工程2(特征选择)
热门文章
- 计算机应用基础0039答案,2016秋5205004计算机应用基础-0039【参考答案】
- 嵌入式开发之NorFlash 和NandFlash
- 统计分析知识之--描述性统计
- Flink系列之Flink集群搭建
- Java之JDK环境的安装与配置
- php artisan实现机制,源码解读:php artisan serve
- 谷歌研究员Francois Chollet:有良知的AI研究人员不应该在Facebook工作
- 白菜个人导航页2.0
- Beat #39;Em Up Game Starter Kit (横版格斗游戏) cocos2d-x游戏源代码
- altera fpga 型号说明_Actel与Altera、Xilinx的FPGA选型对比参考