冒泡排序
冒泡排序,双重for循环,所以时间复杂度是O (n*n)
内层循环每次做相邻两个数字的比较,每循环一次比较出两个数字的大小,
外层循环,没循环一次,将一个数上升到他的正确位置。
package sort;
/**
* @author: tianhaichao
* @date: 2022/9/15 10:15
* @description: 冒泡排序
*/
public class BubbleSort {
public static void sortUp(int[] array) {
int temp;
// 从第一个数开始,每一次循环,排好一个数字的位置,把最大的数上升到最上面
for (int i = 0; i < array.length -1; i++) {
BubbleSort.print(array);
//从第一个数开始,每一次循环,将当前数字与他的后一位做比较,如果比后一位大,两者交换,否则不动。
for (int j = 0; j < array.length - i - 1; j++) {
if (array[j] > array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
/**
* @author: tianhaichao
* @date: 2022/9/15 14:51
* @description:对于相对有序的数据,能节省很多效能
*/
public static void sortUp2(int[] array) {
int temp;
boolean toExchange = true;
for (int i = 0; i < array.length -1; i++) {
BubbleSort.print(array);
toExchange = true;
for (int j = 0; j < array.length - i - 1; j++) {
if (array[j] > array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
toExchange = false;
}
}
if(toExchange){
break;
}
}
}
public static void main(String[] args) {
int[] array = new int[]{1,2,3,6,10,9,5,4};
BubbleSort.sortUp(array);
System.out.println("======================");
array = new int[]{1,2,4,6,11,9,5,10};
BubbleSort.sortUp2(array);
}
public static void print(int[] array){
for (int i = 0;i<array.length;i++){
System.out.print(" ");
System.out.print(array[i]);
System.out.print(" ");
}
System.out.println();
}
}

浙公网安备 33010602011771号