冒泡排序以及优化问题
package com.dl;
import java.util.Arrays;
public class BubbleSortTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {9,8,7,5,6,2,3,4,1,0};
//普通冒泡排序算法
bubbleSortOrdinary(array);
//优化后的排序算法
bubbleSortOptimize(array);
}
/**
* 普通的冒泡排序算法
* @param array
*/
public static void bubbleSortOrdinary(int[] array) {
//第一步,定义一个中间变量,用来辅助---值的交换
int temp = 0;
//第二步,定义一个变量i,用来记录比较的次数
int i=0;
while(i<array.length-1) {
//数字之间的比较,比较次数也是array.length-1
for(int j=0;j<array.length-1-i;j++) {
//判断两个数字的大小
if(array[j]>array[j+1]) {
//如果前一项大于后一项,则,交换数字
temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
}
}
//次数加一
i++;
}
System.out.println("普通冒泡排序算法一共比较"+(i+1)+"次");
System.out.println(Arrays.toString(array));
}
/**
* 优化后的冒泡排序算法
* @param array
*/
public static void bubbleSortOptimize(int[] array) {
//第一步,定义一个中间变量,用来辅助---值的交换
int temp = 0;
//第二步,定义一个变量i,用来记录比较的次数
int i=0;
//第三步,定义一个标识,用来记录是否进行过交换
boolean flag = false;
while(i<array.length-1) {
//数字之间的比较,比较次数也是array.length-1
for(int j=0;j<array.length-1-i;j++) {
//判断两个数字的大小
if(array[j]>array[j+1]) {
//如果前一项大于后一项,则,交换数字
temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
flag = true;
}
}
if(flag) {
//进行过交换,将标识重新置为false,用于判断下一次的比较
flag = false;
}else {
//没有进行过交换
break;
}
//次数加一
i++;
}
System.out.println("优化后的冒泡排序算法一共比较"+(i+1)+"次");
System.out.println(Arrays.toString(array));
}
}