我怎么能生成并打印出最坏情况的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;
}
}
}
我如何修改它以生成最坏情况?。
答案 0 :(得分:1)
按降序排序的数组将是最坏的情况(或者,对于通用实现,排序将它放入的顺序相反)。
要查看此内容,请考虑插入排序的工作原理:
在任何时候,输入都被分成两部分 - 在左边排序,在右边未排序:
sorted | unsorted
最初排序的部分从空开始,然后我们重复将未分类部分的最左边元素插入其中,向右移动值以为其腾出空间。
现在每个插入的最坏情况是当我们必须在左边一直插入它时 - 我们必须将所有其他值向上移动以获得它需要的位置。这会发生什么时候?当要插入的元素小于左边的所有元素时。
所以,最糟糕的情况是每个元素小于它左边的所有元素,这只是数组的降序。