代码的精进

   今天突然意识到一个问题,写代码写久了,可能会忽视一个问题,就是一些很简单的逻辑问题,用代码表达出来,可以看出一个程序员的编程思想的深度,就拿最简单的冒泡排序来说,请看下面代码:

方式一:

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[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();
}

看了第二种写法是否会觉得条理清晰、逻辑功能分明,让人有一种如沐春风的感觉。

      很多时候,我们写代码都是在想当然的以实现业务功能为目的,往往忽略了提高自己的代码能力,好像每天写着似曾相识的代码,觉得对自己没有啥提升。实际是很多简单的代码,我们可以多思考其结构,是否可以进行优化,让代码看起来更整洁,阅读性更好,更舒适。每天一点点的提升,最终也能抵达神坛。

     上面的两种方式代码,如果是在面试过程中,很明显第二种更为优秀。面试中往往会从简单题目看出一个人的基本功和其代码思维能力。谨以此共勉!

你可能感兴趣的:(代码精进,算法)