生成本地插入排序的最坏情况?

时间:2013-10-20 20:44:56

标签: java algorithm sorting time-complexity pseudocode

我怎么能生成并打印出最坏情况的Local insetion排序?这是我对本地插入排序的实现:

public class InsertionSort{
    public static void main(String a[]){
        int i;
        int array[] = {12,9,4,99,120,1,3,10}; 
        System.out.println("Values Before the sort:\n");  

        for(i = 0; i < array.length; i++)
            System.out.print( array[i]+"  ");
        System.out.println();

        insertion_srt(array, array.length);  
        System.out.print("Values after the sort:\n");  

        for(i = 0; i <array.length; i++)
            System.out.print(array[i]+"  ");

        System.out.println(); 
        System.out.println("PAUSE"); 
    }

    public static void insertion_srt(int array[], int n){
        for (int i = 1; i < n; i++){
            int j = i;
            int B = array[i];
            while ((j > 0) && (array[j-1] > B)){
                array[j] = array[j-1];
                j--;
            }
            array[j] = B;
        }
    }
}

我如何修改它以生成最坏情况?。

1 个答案:

答案 0 :(得分:1)

按降序排序的数组将是最坏的情况(或者,对于通用实现,排序将它放入的顺序相反)。

要查看此内容,请考虑插入排序的工作原理:

在任何时候,输入都被分成两部分 - 在左边排序,在右边未排序:

sorted | unsorted

最初排序的部分从空开始,然后我们重复将未分类部分的最左边元素插入其中,向右移动值以为其腾出空间。

现在每个插入的最坏情况是当我们必须在左边一直插入它时 - 我们必须将所有其他值向上移动以获得它需要的位置。这会发生什么时候?当要插入的元素小于左边的所有元素时。

所以,最糟糕的情况是每个元素小于它左边的所有元素,这只是数组的降序。