代碼的精進

   今天突然意識到一個問題,寫代碼寫久了,可能會忽視一個問題,就是一些很簡單的邏輯問題,用代碼表達出來,可以看出一個程序員的編程思想的深度,就拿最簡單的冒泡排序來說,請看下面代碼:

方式一:

public static void bubbleSortV1(int[] arr){
    System.out.println("冒泡排序前:" + Arrays.toString(arr));
    for(int i=0;i < arr.length - 1;i++){
        boolean flag = true; //標示字段,減少循環次數
        for(int j = 0; j < arr.length - i - 1 ;j++){
            if(arr[j] > arr[j+1]){
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
                flag = false;
            }
        }
        if(flag){//循環一圈均未交換,則表示已經全部有序
            break;
        }
    }
    System.out.println("冒泡排序後:" + Arrays.toString(arr));
}

上面代碼看起來沒啥毛病,實現了冒泡功能,也有相應的註釋;

所謂沒有對比就沒有傷害,咱們再來看看另一種寫法:

方式二:

public static void bubbleSortV2(int[] arr){
    for(int i=0; i <arr.length - 1;i++){
        //是否需要繼續循環的標示
        boolean isSorted = false;
        for(int j=0; j < arr.length - i - 1;j++){
            if(arr[j] > arr[j+1]){
                swap(arr,j,j+1);
                isSorted = true;
                print(arr);
            }

        }

        //已排好序則不再循環
        if(!isSorted){
            break;
        }
    }
    System.out.println("排序後:");
    print(arr);
}

public static void swap(int[] arr,int i, int j){
    if(i == j){
       return ;
    }
    arr[i] = arr[i] + arr[j];
    arr[j] = arr[i] - arr[j];
    arr[i] = arr[i] - arr[j];
}

public static void print(int[] arr){
    for(int i=0;i < arr.length;i++){
        System.out.print(arr[i] + "\t");
    }
    System.out.println();
}

看了第二種寫法是否會覺得條理清晰、邏輯功能分明,讓人有一種如沐春風的感覺。

      很多時候,我們寫代碼都是在想當然的以實現業務功能爲目的,往往忽略了提高自己的代碼能力,好像每天寫着似曾相識的代碼,覺得對自己沒有啥提升。實際是很多簡單的代碼,我們可以多思考其結構,是否可以進行優化,讓代碼看起來更整潔,閱讀性更好,更舒適。每天一點點的提升,最終也能抵達神壇。

     上面的兩種方式代碼,如果是在面試過程中,很明顯第二種更爲優秀。面試中往往會從簡單題目看出一個人的基本功和其代碼思維能力。謹以此共勉!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章