合并排序 - 仅对 2^n 个元素进行排序
Merge sort - sorting only 2^n number of elements
我的程序有问题。如果元素数量与 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
[输入]
这个问题非常微不足道。我没有打印最终阵列...
相关文章:
- 查找两个排序向量中共有的元素
- C++ 如何比较n个排序的整数向量以找到互元素?
- 如何在 c++ 中根据第二个元素按降序对列表进行排序
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 高级选择排序 - 在一次迭代中搜索两个元素
- 为什么用户定义的函数不按照给定的顺序对相同长度的元素进行排序?
- 为什么这个选择排序算法仍然切换一个元素,当它已经是其他元素中最小的元素时?
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 将一系列已排序的元素划分为相邻组
- 如何通过保持第一个插入的位置来对列表中插入的其余元素进行排序?
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- "x"的所有元素都存在于"y"(排序向量)中吗?
- 如何根据对的第二个元素对 STL c++ 中的一组对进行排序?
- 如何在保持它们连接到同一元素的同时对 2 个数组进行排序?
- C++:结构与用于排序元素的函数
- 无法在阵列中重新排序元素-rapidjson
- 比较两个向量中的未排序元素
- 我如何在队列中排序元素
- c++中的Hashmap不排序元素
- c++插入排序元素