zoukankan      html  css  js  c++  java
  • Sort Integers II

    Given an integer array, sort it in ascending order. Use quick sort, merge sort, heap sort or any O(nlogn) algorithm.

    分析

    Quick Sort

    index   0 1 2 3 4 5 6 7 8 9 10 11 12 13
    A(key=3)4 1 2 1 5 1 3 2 3 6  2  1  4  3
    1       3 1 2 1 5 1 3 2 3 6  2  1  4  4 
    2       3 1 2 1 1 1 3 2 3 6  2  5  4  4
    3       3 1 2 1 1 1 3 2 3 6  2  5  4  4
                          j i
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public class Solution {
        /**
         * @param A an integer array
         * @return void
         */
        public void sortIntegers2(int[] A) {
            // Write your code here
            quickSortHelper(A, 0, A.length - 1);
        }
        private void quickSortHelper(int[] A, int left, int right) {
            if(left >= right)
                return;
            int i = left, j = right;
            int key = A[left + (right - left) / 2];
            while(i <= j){
                while(i <= j && A[i] < key) ++i;
                while(i <= j && A[j] > key) --j;
                if(i <= j){
                    int tmp = A[i];
                    A[i++] = A[j];
                    A[j--] = tmp;
                }
            }
            quickSortHelper(A, left, j);
            quickSortHelper(A, i, right);
        }
    }

    Merge Sort

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    public class Solution {
        /**
         * @param A an integer array
         * @return void
         */
        public void sortIntegers2(int[] A) {
            // Write your code here
            int[] tmp = new int[A.length];
            mergeSortHelper(A, tmp, 0, A.length - 1);
        }
        private void mergeSortHelper(int[] A, int[] tmp, int left, int right) {
            if(left >= right) return;
            int mid = left + (right - left) >> 1;
            mergeSortHelper(A, tmp, left, mid);
            mergeSortHelper(A, tmp, mid + 1, right);
            merge(A, tmp, left, mid, right);
        }
         
        private void merge(int[] A, int[] tmp, int left, int mid, int right){
            int i = left, j = mid + 1, index = left;
            while(i <= mid || j <= right){
                int a, b, min;
                a = (i <= mid) ?A[i] : Integer.MAX_VALUE;
                b = (j <= right) ? A[j] : Integer.MAX_VALUE;
                min = (a <= b) ?A[i++] : A[j++];
                tmp[index++] = min;
            }
            for(int k = left; k <= right; k++){
                A[k] = tmp[k];
            }
        }
    }




  • 相关阅读:
    JavaScrip 数组/字典/循环
    初识javaScript
    css内容补充之其它
    position
    css的存在形式
    CSS选择器
    Html的Head内标签
    Linux设置FQDN
    saltstack 全面介绍
    jQuery文档处理
  • 原文地址:https://www.cnblogs.com/zhxshseu/p/5233493bb6091d2673322e76e81922d0.html
Copyright © 2011-2022 走看看