如何构建此快速排序以在特定索引值处停止快速排序并开始选择排序?



我有一个快速排序工作,和一个选择排序也工作-我想排序随机整数的int[]快速排序直到array.length = 1,然后为最后一个元素调用选择排序。我知道我需要有一个条件来检查array.length,然后当length = 1时,返回selectionSort(),我不确定如何在quickSort()内的递归调用中构建它。下面是我的两个排序方法:

快速排序:

public void quickSort(int array[], int start, int end) {
    int i = start; // index val of left-to-right scan
    int k = end; // index val of right-to-left scan
    if (end - start >= 1){
        PIVOT = array[start]; 
        while (k > i){
            while (array[i] <= PIVOT && i <= end && k > i)
                i++; 
            while (array[k] > PIVOT && k >= start && k >= i)
                k--;
            if (k > i) 
                swap(array, i, k); 
        }
        swap(array, start, k); 
        quickSort(array, start, k - 1); 
        System.out.println(k);
        quickSort(array, k + 1, end); 
    }
    return;
}

选择排序:

public void selectionSort(int[] nums) {
    //nums[0] = array[0];
    System.out.println(nums.length);
    for (int i = 0; i < (nums.length - 1); i++) {
        for (int j = i + 1; j < nums.length; j++) {
            if (nums[i] > nums[j]) {
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp;
            }
        }
    }
}

你已经差不多做到了。有了这条线,end - start,你得到了长度。如果该长度小于SelectionSortThreshold,则仅对当前长度运行插入排序。这意味着修改selectionSort例程以接受startend参数,以便您可以选择仅对数组的一小部分进行排序。

最新更新