TreeviewCopyright © qgao 2021-* all right reserved, powered by aleen42

排序算法

1. 快速排序

先序遍历

public void quickSort(int[] nums,int begin,int end){
    if(nums == null || nums.length <= 0 || begin >= end){
        return;
    }
    int index = process(nums,begin,end);
    quickSort(nums,0,index-1);
    quickSort(nums,index+1,end);
}

private int process(int[] nums,int begin,int end){
    int key = nums[begin];
    while (begin < end){
        while(key <= nums[end] && begin < end){
            end--;
        }
        nums[begin] = nums[end];
        while(key >= nums[begin] && begin < end){
            begin++;
        }
        nums[end] = nums[begin];
    }
    nums[begin] = key;
    return begin;
}

2. 归并排序

后序遍历

public void mergeSort(int[] nums,int start,int end,int[] tempNums){
    if(nums == null || nums.length <= 0 || tempNums == null || tempNums.length < nums.length
            || start >= end){
        return;
    }
    int mid = (start + end) / 2;
    mergeSort(nums,start,mid,tempNums);
    mergeSort(nums,mid + 1,end,tempNums);
    mergeArray(nums,start,mid,end,tempNums);
}

private void mergeArray(int[] nums,int start,int mid,int end,int[] tempNums){
    if(nums == null || nums.length <= 0 || tempNums == null || tempNums.length < nums.length
            || start >= end){
        return;
    }

    int m = start,endM = mid;
    int n = mid + 1,endN = end;
    int tempPoint = 0;

    while (m <= endM && n <= endN){
        if(nums[m] < nums[n]){
            tempNums[tempPoint++] = nums[m++];
        }else {
            tempNums[tempPoint++] = nums[n++];
        }
    }

    while (m <= endM){
        tempNums[tempPoint++] = nums[m++];
    }

    while (n <= endN){
        tempNums[tempPoint++] = nums[n++];
    }

    for(int i = 0;i < tempPoint;i++){
        nums[start + i] = tempNums[i];
    }
}

3. 基尔排序

public void shellSort(int[] nums){
    if(nums == null || nums.length <= 0){
        return;
    }

    int numsLength = nums.length;
    int interval = 1;
    while(3 * interval + 1 <= numsLength){
        interval = 3 * interval + 1;
    }

    int temp,j;
    while (interval > 0){
        for(int i = interval;i < numsLength;i++){
            temp = nums[i];
            j = i;
            while(j > interval - 1 && nums[j - interval] > temp){
                nums[j] = nums[j - interval];
                j -= interval;
            }
            nums[j] = temp;
        }
        interval = (interval - 1)/3;
    }

}

4. 插入排序

public void insertSort(int[] nums){
    if(nums == null || nums.length == 0){
        return;
    }
    int temp,j,numsLength = nums.length;
    for(int i = 1;i < numsLength;i++){
        j = i;
        temp = nums[i];
        while(j > 0 && nums[j-1] >= temp){
            nums[j] = nums[--j];
        }
        nums[j] = temp;
    }
}

5. 冒泡排序

public void bubbleSort(int[] nums){
    if(nums == null || nums.length == 0){
        return;
    }

    int numsLength = nums.length;
    for(int i = 0;i < numsLength;i++){
        for(int j = 1;j < numsLength - i;j++){
            if(nums[j - 1] > nums[j]){
                nums[j] = nums[j] ^ nums[j - 1];
                nums[j - 1] = nums[j] ^ nums[j - 1];
                nums[j] = nums[j] ^ nums[j - 1];
            }
        }
    }
}

6. 选择排序

public void selectSort(int[] nums){
    if(nums == null || nums.length <= 0){
        return;
    }

    int minNum,temp,numsLength = nums.length;
    for(int i = 0;i < numsLength - 1; i++){
        minNum = i;
        for(int j = i + 1;j < numsLength; j++){
            if(nums[minNum] > nums[j]){
                minNum = j;
            }
        }
        if(minNum != i){
            temp = nums[minNum];
            nums[minNum] = nums[i];
            nums[i] = temp;
        }
    }
}
Copyright © qgao 2021-* all right reserved,powered by Gitbook该文件修订时间: 2022-07-08 12:24:46

results matching ""

    No results matching ""