如何实现混合快速排序和插入排序的混合算法?

问题描述 投票:0回答:0

特别是,从快速排序切换到插入排序的合适阈值是多少?

import java.util.Arrays;
/**
 * A class for sorting array elements using quicksort algorithms
 */
public class QuicksortFixedPivotInsertion implements IntSorter{
    InsertionSort insert = new InsertionSort();

    public int partition(int [] array, int first, int last){
        int middle = (first+last)/2;   
        swap(array, middle, last);        
        int pivot = array[last];
        int i = first - 1;

        for (int j = first; j < last; j++){
            if (array[j]<pivot){
                i++;
                swap(array, i, j);
            }
        } 
        swap(array, i+1, last);
        return i+1;
    }
 
    private void quickSort(int [] array, int first, int last){
        if (array.length < 20){
            insert.sort(array);
        }
        else if (first  < last){
            int pivot = partition(array, first, last);
            quickSort(array, first, pivot - 1);
            quickSort(array, pivot + 1, last);
        }
    }

    public void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    /**
    * sorts the array in ascending order
    * @param v the array to be sorted
    */
    @Override  
    public void sort(int [] v){
        quickSort(v, 0, v.length - 1);
    }
}

正如您所看到的,我已经自己实现了该算法,但我想确保它看起来正确,因为我不确定它是否应该看起来像那样。我不确定的原因是因为我用谷歌搜索,发现当您应该从快速排序切换到插入时的值大约为 20-30。同样在我们在课堂上讨论的讨论中,但与没有插入相比,我并没有真正看到我自己的实现有所改进。
我做错了什么?

java algorithm data-structures quicksort insertion-sort
© www.soinside.com 2019 - 2024. All rights reserved.