冒泡排序:遍历数组,两两比较交换,每一次小循环j将最大的元素放在数组尾部。大循环i是循环数组的长度次数,小循环则不用排最后一个元素,每次循环长度减去i,最后完成排序:
public static void BubbleSort(int[] values){
for (int i = 0; i <values.length-1 ; i++) {
int temp = 0;
boolean flag=true;
for (int j = 0; j < values.length - 1-i; j++) {
if (values[j] > values[j + 1]) {
temp = values[j + 1];
values[j + 1] = values[j];
values[j] = temp;
flag=false;
}
System.out.println(Arrays.toString(values));//每交换一次输出一遍数组
}
if(flag==true){
System.out.println("发现数组内不再进行交换,结束");break;}
System.out.println("第"+(i+1)+"次小循环结束,排好了第"+(values.length-i)+"个元素");
}
}
}
优化则是加上判断标志flag,如何发现内循环一次没有进行元素交换,则跳出外循环。
最差时间复杂度:O( n^2 )
最好时间复杂度:O( n ) 数组本身有序的情况