public class OrderClass {
/**
* 冒泡升序排
* 打印出每次的排序结果
*原理:小的往上挪,大的往下沉
* 比较相邻的两个数据,如果第二个数小,就交换位置。
*从后向前两两比较,一直到比较最前两个数据。
* 最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了。
*继续重复上述过程,依次将第2.3...n-1个最小数排好位置。
* 优化:加个标识,如果没有移动的就说明结束了
* 空间复杂度:O(1)
* 时间复杂度O(n的二次方)
* 稳定排序
* @param arr
*/
public void bubble(int[] arr) {
if(arr.length>0) {
boolean flag=false;
printNum(arr);
for(int i=0;i<arr.length-1;i++){
int temp=0;
for(int j=arr.length-1;j>i;j--){
if(arr[j]<arr[j-1]) {
temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
flag=true;
}else{
flag=false;
}
}
if(!flag) {
break;
}
printNum(arr);
}
}
}
public static void printNum(int[] obs) {
for(int i=0;i<obs.length;i++) {
System.out.print(obs[i]+" ");
}
System.out.println();
}
public static void main(String[] arr) {
int[] nums={69,45,67,12,34,4,5,7,89};
new Order0226().bubble(nums);
}
}