Java插入排序

时间:2017-04-25 00:51:35

标签: java arrays sorting insertion-sort

下面是main方法调用insertSort方法放入多个不同大小的数组。我在这个例子中只有一个数组,但有多个将被运行。我无法弄清楚如何让arr2排序,就像插入排序一样排序。从arr2的末端开始向上推,直到它到达arr2中的正确点,然后再次查看未排序的数组,并将下一个数字放在arr2的末尾,然后一次又一次地对它进行排序,直到有一个排序如果你可以帮助我,那就太棒了。是的,我看过其他代码,但没有人帮助我解决我的问题,我花了一个星期试图解决这个问题。

static void insertionSort(int[] arr) {
    final long startTime = System.nanoTime(); // starts timer
    System.out.println("Insertion Sort");
    //************** Code For Sorting *****************//
    int[] sorted = Arrays.copyOf(arr, arr.length); // Copies unsorted array to new array
    Arrays.sort(sorted); // sorts unsorted array for compairison later on

    int[] arr2 = new int[arr.length];
    for(int h = 0; h < arr.length - 1; h++){// makes arr2 all 0's
        arr2[h] = 0;
    }

    arr2[arr2.length - 1] = arr[0];
    for(int k = 0; k < arr.length; k++){
        System.out.print(arr2[k] + ", ");
    }
    System.out.println();


    while(arr2 != sorted){

        for(int i = 1; i < arr2.length; i++){
            if(arr[i] < arr2[arr2.length-1]){
                int last = arr2[arr2.length-1];
                int before = arr[i];
                arr2[arr2.length-1]= before;
                arr2[arr2.length-2]= last;

                // CANT FIGURE OUT HOW TO SORT CORRECTLY
            }





            for(int k = 0; k < arr.length; k++){
                System.out.print(arr2[k] + ", ");
            }
            System.out.println();
        }

    }
    for(int k = 0; k < arr.length; k++){
        System.out.print(arr2[k] + ", ");
    }
}
 public static void main(String[] args) {  
    int arr[] = {}; // Array that will be put into each sort method
    //****************Multiple Arrays for testing*******************//

    /* ************All Arrays Are Whole Numbers 1-100***************
    arr1 = Array of size 20
***************************************************************  */
    int arr1[] = {6,3,20,10,11,2,9,1,19,17,4,16,8,15,18,14,5,7,12,13}; // {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}
//**************************************************************//
    int arrayNumber = 1;
    while(arrayNumber < 2){
        if (arrayNumber == 1){
            arr = arr1;
        }
System.out.println("Array "+ arrayNumber +" Before Sorting");
        for(int i = 0; i < arr.length; i++){
            System.out.print(arr[i] + ", ");
        }
        System.out.println();
        //************* Array put into Methods***************//
 insertionSort(arr);
//***************************************************//
        arrayNumber++; // Adds 1 to arrayNumber to show next array
    }

}

1 个答案:

答案 0 :(得分:1)

首先<component :is='currentView'> </component> 永远不能arr2== sorted表示两个对象具有相同的地址 在memory.and然后,insert sort是一组Object,并将它们存储在一个有序集合中,在==方法中,至少你需要两个数组,你的insertionSort(int[] arr)是一个排序数组。但是你需要更多空间,换句话说,你可以初始化arr2。然后只需迭代arr2 = new int[arr.length*2];。并将arr插入到正确的位置。正确的位置是你比较时{{1}如果arr[i] arr[i],则索引j是正确的位置 。然后将arr2[j]的所有元素移到索引arr[i]>= arr[j] && arr[i]<arr[j+1]arr2的最后一个元素之间,我们说j,而不是arr2,重要的是,你应该移动arr[k]首先一步,就像arr2.length-1一样,从现在起,一个对象被插入到arr2[k]