选择排序、快速排序、冒泡排序、插入排序
2017-09-08 11:13
155 查看
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)
在一个长度为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)
相关文章推荐
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- (巩固基础篇)排序算法:①插入排序②希尔排序③冒泡排序④选择排序⑤快速排序
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序
- 几种内部排序算法总结!(冒泡排序、快速排序、直接插入排序、拆半插入排序、简单选择排序)
- javascript的冒泡排序, 快速排序, 选择排序, 插入排序
- CPP冒泡排序,插入排序,快速排序,等
- Java-冒泡排序、快速排序、插入排序、快速排序
- 七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)
- [PHP]基本排序(冒泡排序、快速排序、选择排序、插入排序、二分法排序)
- 七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)
- 冒泡排序、选择排序、插入排序、快速排序、二叉树
- Java 排序 快速排序 冒泡排序 选择排序 插入排序
- PHP常用排序算法 冒泡排序 快速排序 插入排序
- 选择排序,冒泡排序,归并排序,快速排序,堆排序等等
- Java实现排序(快速排序、冒泡排序、选择排序、基数排序、插入排序)
- 冒泡排序,快速排序,插入排序(JS版)
- Java-冒泡排序、快速排序、插入排序、快速排序
- 快速排序,冒泡排序,插入排序 完整示例
- 算法---冒泡排序,快速排序,二分查找(折半查找),选择排序,插入排序