Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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_Data Structures_Insertion Sort - Fatal编程技术网

Java 这是插入排序的正确实现吗?

Java 这是插入排序的正确实现吗?,java,algorithm,data-structures,insertion-sort,Java,Algorithm,Data Structures,Insertion Sort,您好,我用Java做了一个插入排序,但我不知道我是否正确地实现了这一点。谁能合作? 我认为插入排序需要在for循环中包含while循环 因此,我实施了这项措施,但我不知道这是否正确 // ------------------------------------------------------------ import java.lang.Math; // headers MUST be above the first class import java.util.Arrays; // o

您好,我用Java做了一个插入排序,但我不知道我是否正确地实现了这一点。谁能合作? 我认为插入排序需要在for循环中包含while循环 因此,我实施了这项措施,但我不知道这是否正确

// ------------------------------------------------------------

import java.lang.Math; // headers MUST be above the first class
import java.util.Arrays;

// one class needs to have a main() method
public class Insertionsort {
    // arguments are passed using the text field below this editor
    public static void main(String[] args) {
        // --------------------------------------------- insertion sort
        int mainInsersionSortArray[] = {64, 25, 12, 22, 11, 10, 9, 8, 7, 6, 5, 4, 3};
        int insertionSortTemporaryValue = 0;
        System.out.println("Array before insertion sort");
        for (int z = 0; z < mainInsersionSortArray.length; z++) {
            System.out.println(mainInsersionSortArray[z]);
        }

        int x1;
        for (int k0 = 1; k0 < mainInsersionSortArray.length; k0++) {
            x1 = k0;
            while (x1 != 0) {
                if (mainInsersionSortArray[x1] < mainInsersionSortArray[x1 - 1]) {
                    insertionSortTemporaryValue = mainInsersionSortArray[x1];
                    mainInsersionSortArray[x1] = mainInsersionSortArray[x1 - 1];
                    mainInsersionSortArray[x1 - 1] = insertionSortTemporaryValue;
                }
                x1 = x1 - 1;
            }
        }

        System.out.println("\n" + "Array after insertion sort");
        for (int z1 = 0; z1 < mainInsersionSortArray.length; z1++) {  // integerArray.lenght - looping through the whole array starting from i[0]
            System.out.println(mainInsersionSortArray[z1]);
        }
    }
}
//------------------------------------------------------------
导入java.lang.Math;//标题必须在第一个类之上
导入java.util.array;
//一个类需要有一个main()方法
公共类Insertionsort{
//使用此编辑器下面的文本字段传递参数
公共静态void main(字符串[]args){
//---------------------------------------------------插入排序
int mainInsersionSortArray[]={64,25,12,22,11,10,9,8,7,6,5,4,3};
int insertionSortTemporaryValue=0;
System.out.println(“插入前数组排序”);
对于(int z=0;z

插入排序在java中实现。< /p> < p>假设在该算法的若干步骤之后,对数组[C:>[k:[k/<代码>(即<代码> k>代码>除外)的数组]进行排序。在下一步中,我们考虑元素<代码> A[K]。
,搜索其插入位置并移动此位置之后的所有元素。最好在一次过程中保留
a[k]
的副本,移动较大的元素并将复制的元素放在正确的位置。为避免缓冲区溢出,搜索应在索引
0
处停止

内部循环读取

int Save= A[k];
for ( ; k >= 0 && A[k-1] > Save; k--) // Loop until you can insert
{
    A[k]= A[k-1]; // Shift
}
A[k]= Save;
如果
A[k]
已经在正确的位置,则更好的变体可以避免不必要的拷贝:

if (A[k] <= A[k-1])
{
    int Save= A[k];
    A[k]= A[k-1]; // Shift
    for (k--; k >= 0 && A[k-1] > Save; k--) // Loop until you can insert
    {
        A[k]= A[k-1]; // Shift
    }
    A[k]= Save;
}

首先,请格式化你的代码,然后你为什么要问这个问题?它是否有效?如果无效,请提供一个示例输入-预期输出以及实际输出-恐怕你需要自己测试它。堆栈溢出适用于具有足够详细信息以确定答案的特定问题。调试测试不在堆栈溢出的范围内。而且它更可能是
Bubblesort
而不是
Insertionsort
算法。代码正在工作,并对数组进行排序,但我不知道我是否进行了插入排序或某种不同的排序(例如,冒泡排序/选择排序).?@ekcs您应该能够将您的代码与其他插入排序代码或您可以在网上找到的插入排序可视化进行比较。如果您从逻辑上理解了插入排序应该做什么,那么您应该能够判断这是否是您的代码正在做的事情(如果您编写的代码您不理解,您会遇到更大的问题)。
for (j= 1; j < n; j++)
{
    k= j;
    "Inner loop"
}