今天在学习Arrays这个类中的一个方法的时候让我产生了浓厚的兴趣,是什么方法呢?就是sort()这个方法,为什么呢?因为我很好奇java的开发者是如何来写这个排序算法的。当我跟踪进入到内部代码找到了sort()方法的一个小部分(里面有很多不同的内容,我只提取出来我想要的,有兴趣的同学可以自己去看看。)就是下面的代码。
for (int i = left, j = i; i < right; j = ++i) {
int ai = a[i + 1];
while (ai < a[j]) {
a[j + 1] = a[j];
if (j-- == left) {
break;
}
}
a[j + 1] = ai;
}
开着很简单,但是我自己却逐步演示例三遍才完全进入到正确的思路中,就因为 if 语句中那个 j-- 。然后我就对它进行了修改变成了我想要的样子。具体如下:
public class Main {
public static void main(String[] args) {
int[] arr = {12,3,1,55,43,58};
kuaiSortUp(arr);
}
public static void kuaiSortUp(int[] arr){
for (int i = 0,j = i; i < arr.length-1; j = ++ i) {
int temp = arr[i+1];
while(temp < arr[j]){
arr[j+1] = arr[j];
if(j-- == 0){
break;
}
}
arr[j+1] = temp;
}
for (int i = 0; i++ < arr.length; ) {
System.out.print(arr[i-1]+" ");
}
}
}
简化的每一次 for 循环结果如下:
/**
* 1:j=i=0 {12,3,1,55,43,58}
* 2:{3,12,1,55,43,58} j=i=1
* 3:{3,1,12,55,43,58} j=i=2
* 4:{1,3,12,55,43,58} j=i=3
* 5:{1,3,12,43,55,58} j=i=4
* 6:{1,3,12,43,55,58}
*/
具体如何执行程序还需要自己多加揣摩,我只能提醒在 if 语句这个地方要多加注意,希望你和我一样能有所收获。
后来根据这一段代码我又找到了一种不同的 for 语句编程方式,在一些遍历数组或集合元素的场合能够跟显你的高深,具体如下:
public class Main {
public static void main(String[] args) {
int[] arr = {12,3,1,55,43,58};
for (int i = 0; i++ < arr.length; ) {
System.out.print(arr[i-1]+" ");
}
}
}