这是java插入排序的代码吗?为什么要使用额外的变量?

qnakjoqk  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(274)

我只是写了下面的代码,我不确定它是否是java中插入排序的正确实现(它看起来太类似于冒泡排序,我不敢肯定)。

public static void insertionsort (int[] arr){
    int temp;
    for (int i = 0; i<arr.length; i++){
            for (int j = i+1; j>=0; j--){

             if (arr[j]<arr[j-1]){
                temp = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = temp;
            }

         }

    }

}

当我将我的解决方案与在线解决方案进行比较时,我注意到它们都使用一个变量来存储arr[i]。例如:

void sort(int arr[]) 
{ 
    int n = arr.length; 
    for (int i = 1; i < n; ++i) { 
        int key = arr[i]; 
        int j = i - 1; 

        /* Move elements of arr[0..i-1], that are 
           greater than key, to one position ahead 
           of their current position */
        while (j >= 0 && arr[j] > key) { 
            arr[j + 1] = arr[j]; 
            j = j - 1; 
        } 
        arr[j + 1] = key; 
    } 
}

这个关键变量的用途是什么?不是有点多余吗?

aiqt4smr

aiqt4smr1#

key变量的作用是保存将插入到内部循环之后的排序位置的值。现在看来,您的解决方案对于插入排序还不够有效。

相关问题