排序-冒泡/简单选择排序

稳定性

举例:张三的成绩是80分,李四的成绩也是80分,在没有排序之前张三排在李四的前面;
排序后张三依然在李四的前面则称为稳定;
如果排序后张三排在李四的后面则称为不稳定排序;

排序分类

  • 内排序:排序过程中,待排序的所有记录都全部放置在内存中;
  • 外排序:因为排序记录数量太大,不能同时放在内存中,整个排序过程需要在内外存之间多次交换数据;

冒泡排序

算法思路:一种交换排序,两两比较关键字,如果反序则交换,直到不存在反序为止;

  • 最简单的交换排序: 每次循环都是当前i与未循环过的数据进行比较;
  • 每次外求数列中的最小值放在最上边的位置;


    排序-冒泡/简单选择排序_第1张图片
  • 可以用来求数列的前k个最大或最小值;

两两比较,将小值固定的放在数组首位(自上而下);

  • 冒泡排序:在每一次循环中列循环都是从底下两两比较一直到外层行循环为止;
  • 每一次大循环将最小值冒到最顶部;


    排序-冒泡/简单选择排序_第2张图片

两两比较,将小值冒泡推送到数组首位(自下而上);

  • 冒泡排序的优化:如果我们待排序的序列是{2,1,3,4,5,6,7,8,9},也就是说,除了第一和第二的关键字需要交换外,别的都已经是正常的顺序。当i=1时,交换了2和1,此时序列已经有序,但是算法仍然不依不饶的将i=2到9,以及每个循环中的j循环都执行了一遍,尽管并没有交换数据,但是之后的大量比较还是大大的多余了。
排序-冒泡/简单选择排序_第3张图片
  • 简单选择排序:减少简单交换排序中的频繁交换,在子循环中只找出最小值,外层循环进行判断交换;
  • 每次选择最小值进行交换;

以上几种简单的排序算法时间复杂度都是O(n的平方),完整代码地址:点击进入...

你可能感兴趣的:(排序-冒泡/简单选择排序)