将以下数组中的数据从小到达排序
int[] numbers={18,32,26,11,9,13,24,35,24}
思路:
- 相邻两个数进行比较,如果位置不对,进行交换,整个数组中未排序的数都比较了一遍叫做一趟。
- 把数组中的未排序元素都比较一遍叫做一趟,这一趟需要比较很多次才能完成。
- 每一趟只能保证把最大数挪到当前未排好序的数据的最后。
- 弄清楚一共需要比较多少趟。n-1
- 弄清楚每一趟需要比较多少次。第一趟需要比较n-1,后面随着趟数的增加,比较次数会逐渐减少,每次减少1。
- 外层循环控制趟数,内层循环控制每一趟要比较的次数。
-
在循环体中对位置不对数据的进行调整。
原理
package xinqushi;
public class BubbleSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] numbers={18,32,26,11,9,13,24,35,24};
int n=numbers.length;
for (int i=1;i<=n-1;i++){ //一趟,一共需要n-1趟
boolean flag=false; //算法优化
for(int j=1;j<=n-i;j++){ //每一趟中,需要比较的次数,比较n-i次,每次减1
if(numbers[j-1]>numbers[j]){
int temp=numbers[j-1];
numbers[j-1]=numbers[j];
numbers[j]=temp;
flag=true;
}
}
if (!flag){ //算法优化,排除已经排好顺序,但还要两两比较的情况
break;
}
}
for(int i=0;i<n;i++){
System.out.print(numbers[i] + "\t");
}
}
}
结果
网友评论