合并排序 - 仅对 2^n 个元素进行排序

Merge sort - sorting only 2^n number of elements

本文关键字:排序 元素 仅对 合并      更新时间:2023-10-16

我的程序有问题。如果元素数量与 2^n 不同,我的算法不想合并。它在合并之前执行操作。例如,对于输入13 5 10 8 6 22 11 3 12 20 7 9 14 17 19 1 2 18它返回1,3,5,6,7,8,9,10,11,12,13,14,17,19,20,22,2,18,,它适用于从 1 到 16 然后从 17 到 18 的 pos

功能

void mergeSort(int arr[], int arrSort[], int first, int mid, int last) {
    int from = first;
    int to = mid;
    for (int i = first; i<last; i++) {
        if ((arr[from] <= arr[to] && from<mid) || to >= last) {
            arrSort[i] = arr[from];
            from++;
        } else if ((arr[to]<arr[from] && to<last) || from >= mid) {
            arrSort[i] = arr[to];
            to++;
        }
    }
    for (int i = first; i<last; i++)
        arr[i] = arrSort[i];
}
void mergeSortIter(int array[], int size) {
    int *a = new int[size];
    for (int i = 1; i <= size; i *= 2) {
        showArray(array, size);
        for (int j = i; j <= size; j += (2 * i))
            mergeSort(array, a, j - i, j, min((j + i), size));
    }
}

其余代码

https://pastebin.com/2ugS5ZpZ

要测试它,您需要编写mi 6 [输入](6 是元素数(,然后是带有空格的元素,例如 5 6 8 2 1 3 [输入]

这个问题非常微不足道。我没有打印最终阵列...