Sorting

Merge Sort

public void mergeSort(int[] nums){
    if(nums == null || nums.length == 0){
        return nums;
    }
    ms(nums, 0, nums.length-1);
}

private void ms(int[] nums, int s, int e){
    if(s > e){
        return;
    }
    int m = s + (e - s)/2;
    ms(nums, s, m);
    ms(nums, m+1, e);
    merge(nums, s, e, m);    
}

private void merge(int[] nums, int s, int e, int m){
    int[] helpArr = new int[nums.length];
    for(int i = s; i <= e; i++){
        helpArr[i] = nums[i];
    }
    int i = s, j = m, current = s;
    while(i <= m && j <=e){
        if(helpArr[i] > helpArr[j]){
            nums[current++] = helpArr[i++];
        }
        else{
            nums[current++] = helpArr[j++];
        }
    }    

    for(int k = i; k <= m; k++){
        nums[current++] = helpArr[k++];
    }    
}

Quick Sort

public void quickSort(int[] nums){
    if(nums == null || nums.length == 0){
        return;
    }
    qs(nums, 0, nums.length - 1);
}

private void qs(int[] nums, int s, int e){
    if(s > e){
        return;
    }        

    int index = partition(nums, s, e);
    qs(nums, s, index - 1);
    qs(nums, index, e);    
}

private int partition(int[] nums, int s, int e){
    if(s >= e){
        return;
    }    

    int m = s + (e - s)/2;
    int pivot = nums[m];
    while(s <= e){
        while(nums[s] < pivot) s++;
        while(nums[e] > pivot) e--;
        if(s <= e){
            int temp = nums[s];
            nums[s] = nums[e];
            nums[e] = temp;
            s++;
            e--;
        }        
    }

    return s;
}

results matching ""

    No results matching ""