面试常见几种排序

冒泡排序

 public static void main(String[] args) {
        int[] arr = {9,7,8,2,1,6,0};
        for(int i=0;i

快速排序

 public static void main(String[] args) {
        int[] arr={5,9,7,4,5,7,6,1,9,9,7,4};
         System.out.println(Arrays.toString(arr));
         sort(arr,0,arr.length-1);
         System.out.println(Arrays.toString(arr));
    }

    public static void sort(int[] a,int x,int y){
        int i=x;
        int j=y;
        if (i>j) {//放在k之前,防止下标越界
            return;
        }
        int k=a[i];
        while (ik) {//找出小的数
                j--;
            }
            while (i

二分查找

public static void main(String[] args) {
        int[] arr = {1,3,5,7,9,11};
        int key = 5;
        int position = s(arr,key,0,arr.length - 1);
        if(position == -1){
            System.out.println("查找的是"+key+",序列中没有该数!");
        }else{
            System.out.println("查找的是"+key+",找到位置为:"+position);
        }
    }

    public static int s(int[] a,int key,int x,int y){
        if(key < a[x] || key > a[y] || x > y){
            return -1;
        }
        int m = (x + y) / 2;//初始中间位置
        if(a[m] > key){
            //比关键字大则关键字在左区域
            return s(a, key, x, m -1);
        }else if(a[m] < key){
            //比关键字小则关键字在右区域
            return s(a, key, m + 1, y);
        }else {
            return m;
        }
    }

归并排序

 public static void main(String[] args) {
        int[] a = {5,9,7,4,5,7,6,1,9,9,7,4};
        sort(a, 0, a.length - 1);
        System.out.println(Arrays.toString(a));
    }

    public static void sort(int[] arr, int L, int R) {
        if(L == R) {
            return;
        }
        int mid = L + ((R - L) /2);
        sort(arr, L, mid);
        sort(arr, mid + 1, R);
        merge(arr, L, mid, R);
    }

    public static void merge(int[] arr, int L, int mid, int R) {
        int[] temp = new int[R - L + 1];
        int i = 0;
        int p1 = L;
        int p2 = mid + 1;
        // 比较左右两部分的元素,哪个小,把那个元素填入temp中
        while(p1 <= mid && p2 <= R) {
            temp[i++] = arr[p1] < arr[p2] ? arr[p1++] : arr[p2++];
        }
        // 上面的循环退出后,把剩余的元素依次填入到temp中
        // 以下两个while只有一个会执行
        while(p1 <= mid) {
            temp[i++] = arr[p1++];
        }
        while(p2 <= R) {
            temp[i++] = arr[p2++];
        }
        // 把最终的排序的结果复制给原数组
        for(i = 0; i < temp.length; i++) {
            arr[L + i] = temp[i];
        }
    }

 

转载于:https://my.oschina.net/u/3962987/blog/3095263

你可能感兴趣的:(面试)