1.为什么需要冒泡排序
在程序设计中,经常需要将一组数列进行排序,这样更加方便统计与查询。程序常用的排序方法有冒泡排序、选择排序和反转排序。这篇文章将讲解冒泡排序
冒泡排序是最常用的数组排序算法之一,它排序数组元素的过程总是将较小的数往前放,将较大的数往后放,这个过程有点类似水中的气泡往上升的动作,所以称之为冒泡排序。
2.冒泡排序的基本思想
冒泡排序的基本思想就是比对两个相邻的元素值,如果满足条件就交换两个元素,把较小的值往前移,较大的致往后移动。(也就是满足条件后,交换两个值的位置),这样较小的元素就像气泡从底部上升到顶部。
3.算法图解
算法示例冒泡算法由双层循环实现,其中外层循环用于控制排序轮数,一般为要排序的数组长度减1次因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。而内层循环主要于对比数组中每个邻近元素的大小,以确定是否交换位置,对比和交换次数随排序轮数而减少。例如,6个元素的数组,在排序过程中每一次循环的排序过程和结果
第1轮外层循环时把最大的元素值63移动到了最后面(相应地,比64小的元素向前移动,类似气泡上升);第2轮外层循环不再对比最后一个元素值64,因为它已经被确认为最大(不需要上升),应该放在最后,需要对比和移动的是其他剩余元素,这次将元素24移动到了64的前一个位置。其他循环将以此类推,继续完成排序任务。
4.算法实现
public class BubbleSort {
public static void main(String[] args) {
// 创建一个数组,这个数组元素是乱序的
int[] array = { 64, 4, 24, 1, 3, 13 };
for (int i = 1; i < array.length; i++) {
// 比较相邻两个元素,较大的数往后冒泡
for (int j = 0; j < array.length - i; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j]; // 把第一个元素值保存到临时变量中
array[j] = array[j + 1]; // 把第二个元素值保存到第一个元素单元中
array[j + 1] = temp; // 把临时变量(也就是第一个元素原值)保存到第二个元素中
}
}
}
for (int i : array) { // 遍历数组
System.out.print(" >" + i); // 输出每个数组元素值
}
}
}
运行结果如下:
>1 >3 >4 >13 >24 >64
从实例的运行结果来看,数组中的元素已经按从小到大的顺序排列好了。冒泡排序的主要思想就是:把相邻两个元素进行比较,如满足一定条件则进行交换(如判断大小或日期前后等),每次循环都将最大(或最小)的元素排在最后,下一次循环是对数组中其他的元素进行类似操作。