今天突然意識到一個問題,寫代碼寫久了,可能會忽視一個問題,就是一些很簡單的邏輯問題,用代碼表達出來,可以看出一個程序員的編程思想的深度,就拿最簡單的冒泡排序來說,請看下面代碼:
方式一:
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(); }
看了第二種寫法是否會覺得條理清晰、邏輯功能分明,讓人有一種如沐春風的感覺。
很多時候,我們寫代碼都是在想當然的以實現業務功能爲目的,往往忽略了提高自己的代碼能力,好像每天寫着似曾相識的代碼,覺得對自己沒有啥提升。實際是很多簡單的代碼,我們可以多思考其結構,是否可以進行優化,讓代碼看起來更整潔,閱讀性更好,更舒適。每天一點點的提升,最終也能抵達神壇。
上面的兩種方式代碼,如果是在面試過程中,很明顯第二種更爲優秀。面試中往往會從簡單題目看出一個人的基本功和其代碼思維能力。謹以此共勉!