數組右移後二分查找

import java.util.Arrays;

public class Temp {

    //右移數組m位
    public static void shiftArray1(int[] data, int m) {
        int len = data.length;
        while (m-- > 0) {
            int temp = data[len - 1];
            for (int i = len - 1; i >= 1; i--) {
                data[i] = data[i - 1];
            }
            data[0] = temp;
        }
    }

    //右移數組m位
    public static void shiftArray2(int[] data, int m) {
        int len = data.length;
        reverse(data, 0, len - 1);
        reverse(data, 0, m - 1);
        reverse(data, 2, len - 1);
    }

    //在右移後數組進行二分查找
    public static int findKey(int[] data, int key) {
        if (data == null || data.length == 0) {
            return -1;
        }

        int len = data.length;

        int left = 0;
        int right = len - 1;
        while (left <= right) {
            int mid = (left + right) >> 1;
            if (data[mid] == key) {
                return mid;
            }

            if (data[mid] >= data[left]) {
                if (key >= data[left] && key < data[mid]) {
                    right = mid - 1;
                } else {
                    left = mid + 1;
                }
            } else {
                if (key <= data[right] && key > data[mid]) {
                    left = mid + 1;
                } else {
                    right = mid - 1;
                }
            }
        }

        return -1;
    }

    public static void swap(int[] data, int i, int j) {
        int temp = data[i];
        data[i] = data[j];
        data[j] = temp;
    }

    public static void reverse(int[] data, int start, int end) {
        for (int i = start, j = end; i < j; i++, j--) {
            swap(data, i, j);
        }
    }

    public static void main(String[] args) {
        int[] data = {1, 2, 3, 4, 5, 6, 7, 8};
        int[] dataCopy = {1, 2, 3, 4, 5, 6, 7, 8};
        int m = 3;

        shiftArray1(data, m);
        System.out.println(Arrays.toString(data));

        shiftArray2(dataCopy, m);
        System.out.println(Arrays.toString(data));

        int index = findKey(data, 3);
        System.out.println("index:" + index);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章