排序法一。
先说最容易理解的这种算法。它的思路是逐个比较取最小的放在前面
public class Demo1 {
public static void main(String[] args) {
Demo1 d1=new Demo1();
int[] values = { 8, 1, 6, 2, 9, 0, 7, 4, 5, 3 };
d1.arithmetic1(values);
}
public void arithmetic1(int[] values){
int temp=0;
//外层循环代表了比较个数
for (int i = 0; i < values.length-1; i++) {
//内层循环代表了每个比较次数
for(int j=i;j<values.length-1;j++){
if(values[i]>values[j+1]){
temp=values[i];
values[i]=values[j+1];
values[j+1]=temp;
}
System.out.println(Arrays.toString(values));
}
System.out.println("===============================");
}
}
}
运算结果:
从这里可以看到逐渐比较次数是减少的。这其实就是数学里面的分组思想,所以我才说最容易理解。
排序法二
public class Demo2 {
public static void main(String[] args) {
Demo1 d1=new Demo1();
int[] values = { 8, 1, 6, 2, 9, 0, 7, 4, 5, 3 };
d1.arithmetic1(values);
System.out.println(Arrays.toString(values));
}
public static void arithmetic1(int[] values) {
int temp;
//外层依然是比较个数
for (int i = 0; i < values.length; i++) {
//内层依然是次数,只不过这是两两想比较,
//最后最大的数放在最后。所以要减去i以免做无用的比较
for (int j = 0; j < values.length - 1 - i; j++) {
if (values[j] > values[j + 1]) {
temp = values[j];
values[j] = values[j + 1];
values[j + 1] = temp;
}
}
}
}
}
计算结果:
优化方面只要添加一个Boolean型变量就可以了。