Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么此insertionSort代码不能提供正确的输出? 公共类优先{ 公共静态void main(字符串[]args){ int[]arr=新的int[]{4,2,7,8}; int[]p=插入排序(arr); System.out.println(java.util.array.toString(p)); } 公共静态int[]插入排序(int[]arr){ int键; int i; 对于(int j=1;j0)和&(arr[i]>key)){ arr[i+1]=arr[i]; 我--; } arr[i+1]=键; } 返回arr; } }_Java_Sorting_Insertion Sort - Fatal编程技术网

为什么此insertionSort代码不能提供正确的输出? 公共类优先{ 公共静态void main(字符串[]args){ int[]arr=新的int[]{4,2,7,8}; int[]p=插入排序(arr); System.out.println(java.util.array.toString(p)); } 公共静态int[]插入排序(int[]arr){ int键; int i; 对于(int j=1;j0)和&(arr[i]>key)){ arr[i+1]=arr[i]; 我--; } arr[i+1]=键; } 返回arr; } }

为什么此insertionSort代码不能提供正确的输出? 公共类优先{ 公共静态void main(字符串[]args){ int[]arr=新的int[]{4,2,7,8}; int[]p=插入排序(arr); System.out.println(java.util.array.toString(p)); } 公共静态int[]插入排序(int[]arr){ int键; int i; 对于(int j=1;j0)和&(arr[i]>key)){ arr[i+1]=arr[i]; 我--; } arr[i+1]=键; } 返回arr; } },java,sorting,insertion-sort,Java,Sorting,Insertion Sort,我不确定发生了什么,但上面的代码只是打印原始的未排序数组,而不是已排序的int数组。 public class First{ public static void main(String[] args){ int[] arr = new int[]{4, 2, 7, 8}; int[] p = insertionSort(arr); System.out.println(java.util.Arrays.toString(p));

我不确定发生了什么,但上面的代码只是打印原始的未排序数组,而不是已排序的int数组。

public class First{
    public static void main(String[] args){
        int[] arr = new int[]{4, 2, 7, 8};
        int[] p = insertionSort(arr);
        System.out.println(java.util.Arrays.toString(p));

    }

    public static int[] insertionSort(int[] arr){
        int key;
        int i;
        for (int j = 1; j < arr.length; j++){
            key = arr[j];
            i = j - 1;
            while( (i > 0) && (arr[i] > key)){
                arr[i + 1] = arr[i];
                i--;
            }
            arr[i + 1] = key;
        }
        return arr;
    }

}
应该是

while ((i > 0) && (arr[i] > key)) {
然后我得到

while ((i >= 0) && (arr[i] > key)) {

使用调试器逐步完成流程。让别人指出你的错误不会给你那种发现你自己的错误的惊人的、有益的感觉。我会给你一个提示,试着在循环中为代码中的每个重要变量添加一些SOUT(system.out.println),然后通过添加一个1秒的sleep函数,自己看看你的循环在做什么。这真的有助于实时查看正在发生的事情(或者调试最终是一样的)@MohammedHousseynTaleb-这真的是调试的艰难之路。学习使用调试器,并逐步完成代码,这样做会更好,而且省力得多。您可以在您喜欢的任何时候检查您想要的任何变量,并在特定变量达到特定值时使用条件断点之类的东西来停止流。学习使用调试器对于程序员来说是一项非常有价值的技能。使用
println
sleep
-没有那么多。@DavidWallace我当然同意你的观点,因为我也使用调试器,但从算法角度来说,通过打印和睡眠创建自己的调试器可以帮助(新的)程序员了解他在做什么,而写作只是一种思维练习。但你是对的,我支持你的观点。
[2, 4, 7, 8]