冒泡排序与代码优化
排序方法有很多,今天我们专门研究一下冒泡排序
何为冒泡排序:重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。下面来看一段代码—
package shuzu;
import java.util.Arrays;
public class MaoPaopaixu {
public static void bubbleSort(int[] array){
long start = System.currentTimeMillis();//运行时间的测量
boolean flg = false;//判断排序是否完成,有效减少工作量
for (int i = 0; i < array.length-1 ; i++) {
flg = false;
for (int j = 0; j < array.length-1-i; j++) {
if (array[j] > array[j+1]){
int tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
flg = true;
}
}
if (flg == false) {
break;
}
}
long end = System.currentTimeMillis();
System.out.println(end - start);
}
public static void main(String[] args) {
int [] array = {1,5,12,2,6,3,9};
bubbleSort(array);
System.out.println(Arrays.toString(array));
}
}
运行结果如下,上面的0代表运行时间,因为数组元素太少因此时间可以忽略不计。
这是一个经过优化的冒泡排序,通过布尔值得判断可以大大缩短运行时间下面给大家做一个比较:
优化前
public class MaoPaopaixu {
public static void bubbleSort(int[] array) {
long start = System.currentTimeMillis();//运行时间的测量
boolean flg = false;
for (int i = 0; i < 100000; i++) {
flg = false;
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
int tmp = array[j];
array[j] = array[j + 1];
array[j + 1] = tmp;
flg = true;
}
}
/* if (flg == false) {
break;
}*/
}
long end = System.currentTimeMillis();
System.out.println(end - start);
}
public static void main(String[] args) {
int[] array = new int[100000];
for (int i = 0; i <array.length ; i++) {
array[i] = i;
}
bubbleSort(array);
System.out.println(Arrays.toString(array));
}
}
优化前运行结果如下:
优化后
public class MaoPaopaixu {
public static void bubbleSort(int[] array) {
long start = System.currentTimeMillis();//运行时间的测量
boolean flg = false;
for (int i = 0; i < 100000; i++) {
flg = false;
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
int tmp = array[j];
array[j] = array[j + 1];
array[j + 1] = tmp;
flg = true;
}
}
if (flg == false) {
break;
}
}
long end = System.currentTimeMillis();
System.out.println(end - start);
}
public static void main(String[] args) {
int[] array = new int[100000];
for (int i = 0; i <array.length ; i++) {
array[i] = i;
}
bubbleSort(array);
System.out.println(Arrays.toString(array));
}
}
优化后运行结果如下:
他们两个有很明显的对比,还在等什么呢,快来试试吧!!!