Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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
C++ 合并排序-一个数组中的四个已排序部分_C++_Sorting_Mergesort - Fatal编程技术网

C++ 合并排序-一个数组中的四个已排序部分

C++ 合并排序-一个数组中的四个已排序部分,c++,sorting,mergesort,C++,Sorting,Mergesort,我有一个数组,其中有4个排序部分。比如说 int array[20] = {1,4,7,8,10,2,3,6,8,11,1,2,7,8,9,3,4,9,10,13} 我需要做的是对前两个排序部分(1,4,7,8,10和2,3,6,8,11)使用合并排序,然后对第二个排序部分(1,2,7,8,9和3,4,9,10,13)使用合并排序。然后我需要将这两个排序的部分合并到一个排序数组中 我试图使用这段代码,但出现了一些问题 void Merge(int *array, int *aux, int l

我有一个数组,其中有4个排序部分。比如说

int array[20] = {1,4,7,8,10,2,3,6,8,11,1,2,7,8,9,3,4,9,10,13}
我需要做的是对前两个排序部分(1,4,7,8,10和2,3,6,8,11)使用合并排序,然后对第二个排序部分(1,2,7,8,9和3,4,9,10,13)使用合并排序。然后我需要将这两个排序的部分合并到一个排序数组中

我试图使用这段代码,但出现了一些问题

void Merge(int *array, int *aux, int left, int right)
{
    int middleIndex = (left + right) / 2;
    int leftIndex = left;
    int rightIndex = middleIndex + 1;
    int auxIndex = left;
    while (leftIndex <= middleIndex && rightIndex <= right)
    {
        if (array[leftIndex] >= array[rightIndex])
        {
            aux[auxIndex] = array[leftIndex++];
        }
        else
        {
            aux[auxIndex] = array[rightIndex++];
        }
        auxIndex++;
    }
    while (leftIndex <= middleIndex)
    {
        aux[auxIndex] = array[leftIndex++];
        auxIndex++;
    }
    while (rightIndex <= right)
    {
        aux[auxIndex] = array[rightIndex++];
        auxIndex++;
    }
}
void合并(int*array,int*aux,int left,int right)
{
int middleIndex=(左+右)/2;
int leftIndex=左;
int rightIndex=middleIndex+1;
int生长素指数=左;
while(leftIndex
你知道如何修改这个,或者写得更好吗?谢谢

由于已对范围进行排序,并且您知道范围的起点和终点,请使用:


#include

“但有问题”-如果您不告诉我们问题出在哪里,我们无法帮助您…您如何调用Merge?您有四个范围,可以同时合并其中两个,而不是四个。通常情况下,一个只需编写合并排序算法(初始顺序无关紧要),但您正在尝试为此特定情况编写算法吗?此外,您没有显示如何调用函数。请尝试使用left=0、right=10=第二个函数的索引调用此代码。然后替换
leftIndex您知道排序范围的开始和结束索引在哪里吗?如果知道,请使用
std::inplace\u merge
#include <algorithm>
#include <iostream>
#include <iterator>

int array[20] = {1,4,7,8,10,2,3,6,8,11,1,2,7,8,9,3,4,9,10,13};

using namespace std;

void MergeSort(int *arr, int start1, int start2, int start3, 
               int start4, int size)
{
   std::inplace_merge(arr + start1, arr + start2, arr + start3);
   std::inplace_merge(arr + start3, arr + start4, arr + size);
   std::inplace_merge(array, array + start3, arr + size);
}

int main()
{
   MergeSort(array, 0, 5, 10, 15, 20);
   std::copy(array, array + 20, ostream_iterator<int>(cout, " "));
}
        import java.util.Arrays;

        public class Main {

            public static void main(String[] args) {

                int[]  sortArr1 =  merge(new int[] {1 , 4 , 7 , 8 , 10} , new int[] {2 , 3 , 6 , 8 , 11} );
                System.out.println("Merging of sorted array  " +Arrays.toString(sortArr1));

                int[]  sortArr2 =  merge(new int[] {1 , 2 , 7 , 8 , 9} , new int[] {3 , 4 , 9 , 10 , 13} );
                System.out.println("Merging of sorted array  " +Arrays.toString(sortArr2));

                int[]  finalSort = merge(sortArr1 , sortArr2);
                System.out.println("Merging of sorted array  " +Arrays.toString(finalSort));

            }

            public static int[] merge(int[] arr1 , int[] arr2) {

                int[] sort = new int[arr1.length + arr2.length];         
                int j = 0;
                int k = 0;

                for(int i = 0 ; i < sort.length ; i++ ) {
                    if(j <= (arr1.length - 1)  && k <= (arr2.length - 1)) {
                        if(arr1[j] > arr2[k]) {
                            sort[i] = arr2[k++];
                        }else {
                            sort[i] = arr1[j++];
                        }
                    }else if(j <= (arr1.length - 1)) {
                        sort[i] = arr1[j++];
                    }else if(k <= (arr2.length - 1)){
                        sort[i] = arr2[k++];
                    }
                }

                return sort;
            }

        }
       Merging of sorted array  [1, 2, 3, 4, 6, 7, 8, 8, 10, 11]
       Merging of sorted array  [1, 2, 3, 4, 7, 8, 9, 9, 10, 13]
       Merging of sorted array  [1, 1, 2, 2, 3, 3, 4, 4, 6, 7, 7, 8, 8, 8, 9, 9, 10, 10, 11, 13]