Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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
数组后面的Java插入排序算法_Java_Algorithm_Insertion Sort - Fatal编程技术网

数组后面的Java插入排序算法

数组后面的Java插入排序算法,java,algorithm,insertion-sort,Java,Algorithm,Insertion Sort,因此,我一直在尝试编写插入排序算法,以便将值插入到数组的后面,而不是前面(将最大值放在后面,而不是最小值放在前面),但我一直很难确定是否正确。如果有人能告诉我我的想法是否正确,那就太好了。这是我的代码,它似乎没有按我所希望的那样工作: public static void insertionSort(Comparable[] item, int size) { for (int k = size - 1; k > 0; k--) insertInOrder(item

因此,我一直在尝试编写插入排序算法,以便将值插入到数组的后面,而不是前面(将最大值放在后面,而不是最小值放在前面),但我一直很难确定是否正确。如果有人能告诉我我的想法是否正确,那就太好了。这是我的代码,它似乎没有按我所希望的那样工作:

public static void insertionSort(Comparable[] item, int size) {
    for (int k = size - 1; k > 0; k--)
        insertInOrder(item, k);
}

private static void insertInOrder(Comparable[] item, int m) {
    Comparable save = item[m];
    for (; m > 0 && item[m-1].compareTo(save) > 0; m--)
        item[m] = item[m - 1];
    item[m] = save;
}

您的代码有两个问题。以下是一个固定版本:

public static void insertionSort(Comparable[] item, int size) {
    // Changed to k >= 0, otherwise we would have ignored the 0th
    // element and not move it to higher positions in the array
    for (int k = size - 1; k >= 0; k--)
        insertInOrder(item, k, size);
}

// Added size as a parameter
private static void insertInOrder(Comparable[] item, int m, int size) {
    Comparable save = item[m];
    // This loop needs to count upward, because you
    // want to move large values towards the back
    for (; m + 1 < size && item[m+1].compareTo(save) < 0; m++)
        item[m] = item[m + 1];
    item[m] = save;
}
publicstaticvoidinsertionsort(可比[]项,整数大小){
//更改为k>=0,否则我们将忽略第0个
//元素,而不是将其移动到数组中的更高位置
对于(int k=size-1;k>=0;k--)
插入器(项目,k,尺寸);
}
//添加了大小作为参数
专用静态void insertinoder(可比[]项,整数m,整数大小){
可比节省=项目[m];
//这个循环需要向上计数,因为
//要将较大的值移到后面吗
对于(;m+1

补充说明:

  • 通常我们对数组的名称进行复数,即:
    Comparable[]items
  • 考虑对
    可比较的
    类型使用泛型
  • 下次再问你的问题

(当你有工作代码时——以及与之相关的问题。)@greybeard和NayukiMinase,实际上没有。。。这个问题不是主题,因为问题是关于如何编写尚未编写的代码,在后面而不是前面插入值。这种类型的问题违反了代码评审的主题规则。如果您所说的问题是指损坏的代码,那么不,代码评审不适用于损坏的代码。如果您所说的问题是指意大利面代码,那么当然,“向下索引”也没关系,我使用
for(int k=size;0