排序算法之 二分法排序

之所以单独来二分法排序,是因为近些天一直在做二分法查找的问题,延伸只二分法排序,做此记录,以便于以后记忆。
首先了解下二分法的思想:对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。
个人理解二分法排序就是利用二分法查找结合插入排序实现,利用二分法找到要插入的位置,然后目标位置后面的元素往后移。
代码实现:

int[] arr = {49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 1};
        for (int i = 1; i < arr.length; i++) {
            int temp = arr[i];  //要插入的第i个元素
            int low = 0;
            int high = i - 1; //插入目标元素的前 i-1 个元素
            int mid = -1;
            while (low <= high) {
                mid = low + (high - low) / 2;
                if (arr[mid] > temp) {
                    high = mid - 1;
                } else { // 元素相同时,也插入在后面的位置
                    low = mid + 1;
                }
            }
            // 目标位置 之后的元素 整体移动一位
            for(int j = i - 1; j >= low; j--) {
                arr[j + 1] = arr[j];
            }
            arr[low] = temp;
        }
        for (int i = 0; i < arr.length ; i++) {
            System.out.print(arr[i]+" ");
        }

你可能感兴趣的:(算法)