昨晚又开始研究八大排序算法了,上一次还是过年的时候,这么久了不用,又忘了,以此记录。
冒泡排序:就是每一次冒泡都把最大的放在最右边(或者把最小的放在最右边)
package suanfa;
public class BubbleSort{
public static void sort(int[] a) { //定义冒泡排序算法
int temp = 0;
for (int i = a.length - 1; i > 0; i--) {
boolean isSort=false; //定义是否排序完成标识
System.out.println("测试");
for (int j = 0; j < i; j++) {
if (a[j + 1] < a[j]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
isSort=true;
}
}
if(!isSort)break; //完成后直接跳出for i的循环
}
}
public static void main(String[] args) { //测试算法
int a[] = {2,1,3,4,5,6,7,8,9};
sort(a);
for(int i= 0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
}
利用一个 boolean标识,防止不需要排序的时候执行,因为只要把1,2进行交换,后面的就不需要交换了,所以第一次交换完成后 i = 1,而 j 的循环里并没有进行过数据交换,所以表示已经排序成功,所以我们应该退出 for(int i ....)的循环,
因为后面不需要进行数据交换的时候,还是进行了 if (a[j + 1] < a[j]) 比较,这个也浪费了时间 。