CS2L12——冒泡排序
CS2L12——冒泡排序
排序的基本概念
排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列
常用的排序例子:
1 | 8 7 1 5 4 2 6 3 9 |
把上面的这个无序排列 变为 有序(升序或者降序)的序列的过程
- 升序:从小到大,呈上升趋势
- 降序:从大到小,呈下降趋势
1 | 1 2 3 4 5 6 7 8 9 (升序) |
在程序中 序列一般 存储在数组当中,所以 排序往往是对 数组内的元素 进行排序,把数组里面的内容变为有序的
1 | int[] arr = new int[] { 8, 7, 1, 5, 4, 2, 6, 3, 9 }; |
排序算法的概念
排序算法(sorting algorithm)用于对一组数据按照特定顺序进行排列。
排序算法有着广泛的应用,因为有序数据通常能够被更高效地查找、分析和处理。
排序算法中的数据类型可以是整数、浮点数、字符或字符串等。
排序的判断规则可根据需求设定,如数字大小、字符 ASCII 码顺序或自定义规则。
冒泡排序
冒泡排序(bubble sort)通过连续地比较与交换相邻元素实现排序。这个过程就像气泡从底部升到顶部一样,因此得名冒泡排序。
设数组的长度为 ,冒泡排序的步骤为:
- 首先,对 个元素执行“冒泡”,将数组的最大元素交换至正确位置。
- 接下来,对剩余 个元素执行“冒泡”,将第二大元素交换至正确位置。
- 以此类推,经过 轮“冒泡”后,前 大的元素都被交换至正确位置。
- 仅剩的一个元素必定是最小元素,无须排序,因此数组排序完成。
简记为:两两相邻 不停比较 不停交换 比较n轮
冒泡排序的基本实现
1 | static void BubbleSort(int[] arr) |
输出:
1 | 排序前: |
冒泡排序的优化实现
确定位置的数字是不用比较的,因此,确定了一轮后,极值(最大或者最小)已经放到了对应的位置(往后放)
所以 每完成 n 轮,后面位置的数就不用再参与比较了
然后,存在这种特殊情况,在前几轮就已经完成了排序,这种情况下,后续没必要再进行多余的比较。
因此,可以增加一个标志位 isSort
来监测这种情况,如果没有出现交换,则说明排序已完成,就立即返回。
1 | static void BetterBubbleSort(int[] arr) |
输出:
1 | 排序得到: |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!