平常的冒泡就算是所给序列是有序的,也会是n的平方的时间复杂度。使用一个标记,如果在一趟冒泡完毕之后发现没有交换任何元素,那么可以确定正在排待排序列已经有序,然后我们已经排好序的部分也已经有序,所以所有的待排序列已经有序。
上代码
package com.sort; public class BubblingSort { public static void main(String[] args) { int[] a = {10,2,3,4,5,6,7,8,10}; sort(a); } public static void sort(int[] a){ int len = a.length; int tag = 0;//用来标记一趟冒泡是否有交换的,否则已经有序 int temp; for(int i = len - 1;i > 0 ;i --){ tag = 0; //在这里设置tag 为0 for(int j = 0;j< i;j ++){ if(a[j] > a[j+1]){ temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; tag = 1; } } System.out.println(tag); if(tag == 0)break;//如果一趟排序没有变化,说明待排序列已经有序 } for(int i = 0; i < len ; i++){ System.out.print(a[i] + " "); } System.out.print("\ntag " + tag); } }
结果集:
1
0
2 3 4 5 6 7 8 10 10
tag 0