冒泡排序与选择排序

冒泡排序与选择排序

一. 冒泡排序
使用for循环,实现排序,每一次循环都是找到当前的最大值,相邻的两个单位进行比较,将最大值排到后置位,经过这样多次的循环,达到排序的效果。
假设一个数组中有五个单元[25,38,49,37,15],使用冒泡排序的方式实现排序([15,25,37,38,49])。原理为:
1. 第一次循环,25与38作比较,25<38,则顺序不变;接着38与49做比较,仍然不变;再49与37比较。49>37,则改变顺序;最后49与15比较;49>15,则改变顺序。此时顺序为[25,38,37,15,49];
2. 第二次循环:与第一次循环一样,不同的是第一次循环后的最后一个值49不用参与比较,因为它已经是目前数组中的最大值。323
3. 后续循环与前面一样,总循环次数为(数组单位元个数-1)。
代码如下图所示:
冒泡排序与选择排序
二. 选择排序
首先定义起始位置默认为最小值所在位置,从起始位置的下一个位置开始,与后面所有的位置进行一次比较,如果后置位有比起始位置小的值,则储存它的索引值,循环结束后,通过索引值找到最小的那个值,与起始位置交换数值,经过多次循环,完成排序。
仍然假设一个数组中有五个单元[25,38,49,37,15],使用冒泡排序的方式实现排序([15,25,37,38,49])。原理为:
1. 第一次循环,25与38作比较,25<38,无操作;接着25与49做比较,25<49,仍然无操作;再25与37比较,25<37,仍然无操作;最后25与15比较,25>15,储存15的索引下标值4,循环结束后,找到索引下标值4所储存的单元15与初始位置进行交换,此时顺序[15,38,49,37,15];
2. 第二次循环:与第一次循环一样,不同的是第一次循环后的第一个值15不用参与比较,因为它已经是目前数组中的最小值。
3. 后续循环与前面一样,总循环次数为(数组单位元个数-1)。
代码如下图所示:
冒泡排序与选择排序

选择排序与冒泡排序相比,选择排序中如果发生大小顺序需要改变的情况,只会操作索引值,等到循环结束后进行一次数据交换;而冒泡排序中,只要发生大小顺序需要改变的情况,就要执行一次。可以看出,冒泡排序执行数据交换的操作比较频繁,执行次数过多,执行效率就会变低。