Sorting 我是否遵循了一个好的方法?

Sorting 我是否遵循了一个好的方法?,sorting,Sorting,请找到所讨论问题的链接 我遵循下面的方法,使用随机数组。希望您能就解决问题的其他方法提出建议:- public class ThreeMachineInsertionSorting { public static void main(String[] args) { int[] ar1 = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,-10}; int[] ar2 = { 20, 19, 18, 17, 16, 15, 14, 23,

请找到所讨论问题的链接

我遵循下面的方法,使用随机数组。希望您能就解决问题的其他方法提出建议:-

public class ThreeMachineInsertionSorting {
    public static void main(String[] args) {
        int[] ar1 = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,-10};
        int[] ar2 = { 20, 19, 18, 17, 16, 15, 14, 23, 12, 11, 10 };
        int[] ar3 = { 20, 19, 21, 122, 10, 9, 11, 12, 4, 13, 18, 17 };

        performInsertionSort(ar1, ar2, ar3);
    }

    private static void performInsertionSort(int[] ar1, int[] ar2, int[] ar3) {
        int[][] arrayOfArrays = { ar1, ar2, ar3 };

        int [] unSortedArray= mergeArrays(ar1,ar2,ar3,arrayOfArrays);

         int i,j,key;
        for(i=1;i<unSortedArray.length;i++){
            key= unSortedArray[i];
            j=i-1;
            while(j>=0 && key<unSortedArray[j]){
                unSortedArray[j+1] = unSortedArray[j];
                j--;
            }
            unSortedArray[j+1] = key;
        }

        System.out.println("Size of the unSorted array is :=" + unSortedArray.length);


        shareLoad(unSortedArray, arrayOfArrays);


    }

    private static void shareLoad(int[] sortedArray, int[][] arrayOfArrays) {
        int loadFactor = sortedArray.length/3;
        int index=0;

        while(index<sortedArray.length){
            for(int [] ar : arrayOfArrays){
                for(int i=0; i<ar.length;i++){
                    if(i<=loadFactor){
                        ar[i] = sortedArray[index];
                        index++;
                    }
                }
            }
        }

        for(int [] ar : arrayOfArrays){
            System.out.println("******************************************array properties**************************************");
            System.out.println("Size of array::" + ar.length);
            for(int i=0; i<ar.length;i++){
                System.out.print(ar[i]+" ");
            }
            System.out.println("\n******************************************************************");
        }


    }

    private static int[] mergeArrays(int[] ar1, int[] ar2, int[] ar3,int[][] arrayOfArrays ) {

        int[] colaboratedArray = new int[ar1.length + ar2.length + ar3.length];
        System.out.println("Length of multi-dimensional array :-"
                + arrayOfArrays.length);

        int i = 0;

        while (i < colaboratedArray.length) {
            for (int[] ar : arrayOfArrays) {
                for (int j = 0; j < ar.length; j++) {
                    colaboratedArray[i++] = ar[j];
                }
            }

        }

        return colaboratedArray;
    }
}
公共类三机插入排序{
公共静态void main(字符串[]args){
int[]ar1={10,9,8,7,6,5,4,3,2,1,-10};
int[]ar2={20,19,18,17,16,15,14,23,12,11,10};
int[]ar3={20,19,21,122,10,9,11,12,4,13,18,17};
表演体育(ar1、ar2、ar3);
}
专用静态void performInsertionSort(int[]ar1、int[]ar2、int[]ar3){
int[]arrayOfArrays={ar1,ar2,ar3};
int[]unSortedArray=mergeArrays(ar1、ar2、ar3、arrayOfarray);
inti,j,key;

对于(i=1;i=0&&key,这里有一个简单的解决方案

使用就地排序算法对M1、M2和M3进行排序

通过找出M1中的所有元素可以替换为M3中较小元素的点,组合M1和M3

要找到这一点,取M3中的1/9,移动到M1中的缓冲区。注意,1/9的数字正好是可用容量的10%。我们从M3中最小的桶开始,将其与M1中最大的桶进行比较。只需比较M3桶的最大值和M1桶的最小值,就可以确定我们是否可以完全交换它们。如果我们可以将桶从M1移动到M3,并从M3引入新桶。这样做直到M1和M3被分割

现在我们必须再次对M1和M3进行排序。现在我们必须从M2中取出最小的元素,并将它们移动到M1,直到M1和M2被分割。完成之后,我们可以对M1和M2进行排序。注意,M1现在完成了

通过分割M2和M3完成,然后对两者进行排序,问题就解决了

请注意,此解决方案要求我们对所有机器进行三次排序,在最坏的情况下,每个数据元素在机器之间移动三次

如果我们能找到两个未排序集的中位数,然后我们可以根据这个中位数对这些集进行划分,然后转移元素,并且只有在我们知道最终的数字在每台机器上时,我们才能在最后进行排序,那么这个解决方案就可以得到改进

如果我们能够在不传输数据的情况下高效地找到3个未排序集的第k个最大元素,则可以进一步改进