选择排序、快速排序、冒泡排序、插入排序
来源:互联网 发布:linux如何修改用户组 编辑:程序博客网 时间:2024/06/10 08:01
1.选择排序:
在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的元素与第一个交换,第N-1趟遍历剩下的2个数据,找出其中最小的值与第N-1个元素交换,直到完成排序。
例如: 11 32 22 13 9
第一趟排序后: 9 32 22 13 11
第二趟排序后: 9 11 22 13 32
第三次排序后: 9 11 13 22 32 排序完成。
平均时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:不稳定
2.快速排序
思想:a在带排序的元素中任取一个元素作为基准(通常选第一个),称为基准元素;
b将带排序的元素进行分区,比基准元素大的元素放在他的右边,比他小的放在左边;
c对左右两个分区重复以上步骤直达所有元素有序;
时间复杂的:O(nlogn)
例如:5 2 6 8 4为带排序元素
首先选取5为基准元素 5 和4比较5>4交互4 2 6 8 5
5 和2比较2<5不交换4 2 6 8 5
5和 8比较8>5交换4 2 6 5 8
5和6比较5<6交互4 2 5 6 8
基准元素分别与最后一个比较,然后与第二个元素比较,然后与倒数第二个比较,然后与第三个比较。。。。大的放右边,小的放左边。
3.冒泡排序
思想:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第一个和第二个数,将小数放前,大数放后,然后比较第二个数和第三个数将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较 (因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个 数),将小数放前中,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟 结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
时间复杂度:O(n^2)
例如:6 3 1 8 4
3 1 6 4 8(最后一个位置为最大数字)
1 3 4 6 8(倒数第二位为倒数第二大)
4.插入排序
思想:检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。
例如:5 8 4 1 6
从第二个数开始:8大于5不用交换,第三个数比第二个数小,交换得到5 4 8 1 6第二个比第一个小,交换,4 5 8 1 6,同理,第四个数与前面的数比较1 4 5 8 6,第五个数与前面的比较1 4 5 6 8完成。
时间复杂度:O(n^2)
- 冒泡排序 快速排序 插入排序 堆排序 选择排序
- 插入排序、选择排序、冒泡排序、快速排序、堆排序
- 数组排序:快速排序,选择排序,冒泡排序,插入排序
- Java 排序 快速排序 冒泡排序 选择排序 插入排序
- 冒泡排序,选择排序,插入排序,快速排序(PHP)
- 选择排序&插入排序&冒泡排序&快速排序算法实现
- 插入排序,冒泡排序,选择排序,快速排序
- 插入排序 选择排序 冒泡排序 快速排序
- 冒泡排序、插入排序、快速排序、选择排序
- 冒泡排序-插入排序-快速排序-选择排序---飞天博客
- java实现冒泡排序,插入排序,选择排序,快速排序
- 递归,汉诺塔,冒泡排序,选择排序,插入排序,快速排序
- swift 3.0 冒泡排序,插入排序,选择排序,快速排序
- 冒泡排序、选择排序、插入排序、快速排序
- 快速排序、冒泡排序、插入排序、选择排序
- 冒泡排序 快速排序 选择排序 插入排序
- php 冒泡排序,选择排序、插入排序、快速排序
- 选择排序、快速排序、冒泡排序、插入排序
- Android Studio live template巧用动态模板也能大大提高你的开发效率
- 关于MySQL 触发器的使用
- 【theano-windows】学习笔记七——logistic回归
- Spring静态代理
- 入职自我介绍
- 选择排序、快速排序、冒泡排序、插入排序
- 如何选择compileSdkVersion, minSdkVersion 和 targetSdkVersion
- CSS3 background-size 属性
- Hibernate初学者---关于annotation注解的相关知识
- 【JAVA300】51-55 笔记
- Python 多线层协调应用举例
- Python实现KNN算法
- Linux C/C++程序员 但行好事 莫问前程 Linux系统下 解决Qt5无法连接MySQL数据库的方法
- hihocoder#1312 : 搜索三·启发式搜索(bfs+hash判重)