冒泡排序 基础版
public static int[] BubbleSort(int[] array) {
for(int i = 0;i < array.length;i++) {
for(int j = 0;j<array.length -1;j++) {
if(array[j] > array[j+1]) {
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
return array;
}
测试:
那么如何进行优化呢,以上写法需要 进行比较 N * N-1 次 ,但是已经排序好的元素是不需要再次进行比较的,所以我们可以做如下改进。原理就是当每经过一次外层循环,就会有一个元素排好序,所以就不需要再次进行比较了
public static int[] BubbleSort(int[] array) {
for(int i = 0;i < array.length;i++) {
for(int j = 0;j<array.length - i -1;j++) {
if(array[j] > array[j+1]) {
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
return array;
}
那么,即使如此,还有没有进一步优化的空间呢?如果给定的数组已经是一个有序数组呢?按照以上写法还是需要进行多次循环,那么我们可以进行以下改进,当我们发现内层循环没有发生数据交换的时候,就可以认定为数组已经完成好排序。
public static int[] BubbleSort(int[] array) {
for(int i = 0;i < array.length;i++) {
boolean isExchange = false;
for(int j = 0;j<array.length - i -1;j++) {
if(array[j] > array[j+1]) {
isExchange = true;
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
if(!isExchange) {
return array;
}
}
return array;
}
以上就是冒泡排序算法及其优化的实现