/*
冒泡排序
其原理是:第一个数与第二个数比较大小,如果第一个数大于第二个数就交换位置(小于等于不交换)
然后拿交换位置后的第二个数与第三个数比较大小,如果第二个数大于第三个数就交换位置(小于等于不交换)
一直比较到最后,这样比较交换位置之后,最后一个数一定是数组中最大的那个数字;这样开始进行下一轮的比较交换,再次将
剩余元素中最大的那个数字排到最后,每一轮比较交换都会挑选出剩余元素中最大的那个数字。这样经过array.length-1轮
比较交换就能完成排序,每一轮的比较次数都是参与排序的元素个数-1次。
*/
public class 冒泡排序 {
public static void main(String[] args) {
// 静态初始化一个int数组
int[] array = {15,7,3,12,6,9,8};
// 采用冒泡排序对其进行排序
int count1 = 0; //为了统计对比次数,打标记
int count2 = 0; //为了统计交换次数,打标记
// 需要进行"array.length-1"轮对比,外层循环这样写是为了内层循环打基础
for (int i = array.length-1; i > 0; i--) {
for (int j = 0; j < i; j++) {
//对比次数自加1
count1 ++;
if (array[j] > array[j + 1]){
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
//每次交换自加1
count2 ++;
}
}
}
//打印比较次数
System.out.println("比较次数:" + count1);
//打印交换次数
System.out.println("交换次数:" + count2);
// 对排序后的数组进行遍历
for (int i = 0; i < array.length; i++) {
//每打印一个元素后面增加一个空格用来分隔元素
System.out.print(array[i] + " ");
}
}
}
/*
程序运行结果:
比较次数:21
交换次数:12
3 6 7 8 9 12 15
*/
另外一种写法:
/**
* 冒泡排序
*/
public class bubbleSort {
public static void main(String[] args) {
//对该数组中的元素按照从小到大的顺序排序
int[] array = new int[]{9,26,5,17,33,22,26,55,39,11,26};
/**
* 数组的长度是length=11,需要进行length-1轮的比较,(每轮比较都会选出相对最大的数,下一轮该数就不需要参与比较了)
* 第一轮比较的次数是length-1,每轮比较的次数都减少1次
* 比较规则是两个数进行比较,第一个数如果大于第二个数,则两个数交换位置,大数逐渐向右冒泡。
*/
for (int i = 0;i < array.length -1;i++){ //length=11,这里进行(0~9共计10轮循环)
for (int j = 0; j < array.length-1-i;j++){
if (array[j] > array[j+1]){ //如果第一个数大于第二个数
//借助第三方变量使两个数互换位置
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(array));
}
}
/*
程序运行结果:
[5, 9, 11, 17, 22, 26, 26, 26, 33, 39, 55]
*/