今天在學習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]+" ");
}
}
}