冒泡排序(java)

时间:2023-12-28 09:00:20

冒泡排序是数据结构中很经典的排序算法,我的理解:以从小到大的顺序为例,原数组为arr[4] = {5, 6, 2, 3},从最右面的元素开始与相邻元素两两比较,交换位置(小的放在左边);从代码中也容易看出,排序过程分为内外两次循环,外循环决定排序的轮数,内循环产生本轮元素中的最值放在最左边(产生的最值不参与下一轮的排序);如第一轮排序中,从arr[3] = 3开始,3>2则不用交换位置;再比较2<6,交换位置,数组变为{5, 2, 6, 3};再比较2<5, 交换位置,数组变为{2, 5, 6, 3};这样第一轮排序结束后,最小的元素就到了最左边,如果把左右看做上下是不是像冒泡一样呢?!没错,每一轮排序都以这种冒泡的方式就可以将数组变为我们想要的顺序{2, 3, 5, 6}.

代码示例:

public class BubbleSort {
public static void sort(long[] arr) {
long tmp = 0;
for(int i = 0; i < arr.length-1; i++) { //外循环表示排序的轮数
for(int j = arr.length-1; j > i; j--) { //内循环表示从最后一个元素到第i+1个元素两两比较大小(j>i说明当j = i时跳出循环,即参与此轮排序的元素只有arr[arr.length-1]...arr[i+1])
if(arr[j] < arr[j-1]) {
//从最下面的元素开始往上两两交换
tmp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = tmp;
}
}
}
}

}