[置顶] java数据结构学习

本文只记录学习过程积累的代码,而不去详细阐述.

一.插入排序

插入排序就和站队问题一样,第一个人站排头,然后第二个人和第一个人比身高再确定位置.这样保证了已经站队的队伍始终是有序的,那么第三个人来的话,依次从后比较,如果比他高,则比他高的那人向后平移,直到遇到第一个不比他高的人,则插入在其后面.

/** * 插入排序 * @param arr 要排序的数组 */
    private static void InsertSort(int[] arr) {
        int j;//这个变量主要是用来右滑的
        int target;//临时存储当前值
        //认为第一个元素有序,所以循环从第二个开始
        for (int i = 1; i < arr.length; i++) {
            j = i;
            target = arr[i];
            //开始查找插入,当当前值比他左边的值小的时候,左边的值需要右滑,留一个空插入
            while(j>0 && target<arr[j-1] ){
                arr[j] = arr[j-1];//右滑
                j--;
            }
            //右滑结束,j的值就是要插入的位置
            arr[j] = target;
        }
    }

二.二分查找

二分查找用来找要插入位置的下标或者元素都非常好用,不过要求就是原序列必须有序.
二分查找思想很简单,一半一半的找,具体看代码即可,该代码是查找插入位置,比如1,2 来个3的话,下标如果从0开始,则插入位置就是2

/** * 二分查找法寻找插入位置 * @param arr 要查找的数组 * @param e 需要插入的元素 */
    private static void binarySearch(int[] arr ,int e){
        int start = 0,end = arr.length-1;//end元素注意不要出界
        int mid;
        while(start <= end){
            mid = (start+end)/2;
            if (arr[mid] > e) {
                end = mid - 1;
            }else {
                start = mid +1;
            }
        }
        System.out.println(start);//输出插入位置
    }

你可能感兴趣的:(java,数据结构)