【发布时间】:2021-07-27 06:14:27
【问题描述】:
在解决问题时,需要对二维数组进行排序。我使用了归并排序,并设置了
#include <iostream>
#include <stack>
#include <queue>
#include <vector>
using namespace std;
int*sorted[1000];
void merge(int** list, int left, int mid, int right);
void merge_sort(int** list, int left, int right);
int main(void) {
int N;
vector <int> L, H;
int l, h, max = 0, max_position, highest, highest_position = 0, area = 0; cin >> N;
int** info = (int**)malloc(sizeof(int*) * N);
for (int i = 0; i < N; i++) {
info[i] = (int*)malloc(sizeof(int) * 2);
}
}
merge_sort(info, 0, N - 1);
}
void merge(int** list, int left, int mid, int right) {
int i, j, k, l;
i = left; j = mid + 1; k = left;
for (int s = 0; s < 7; s++) {
for (int v = 0; v < 2; v++) {
cout << list[s][v] << ' ';
}
cout << '\n';
}
while (i <= mid && j <= right) {
if (list[i][1] <= list[j][1]) // exception occured
{
sorted[k++] = list[i++];
}
else {
sorted[k++] = list[j++];
}
}
if (i > mid) // 1번째 array를 다 쓴 경우
{
for (l = j; l <= right; l++) {
sorted[k++] = list[l];
}
}
else {
for (l = i; l <= mid; l++) {
sorted[k++] = list[l];
}
}
for (l = left; l <= right; l++) {
list[l] = sorted[k]; // I think problem is related with this line
}
}
void merge_sort(int** list, int left, int right) {
int mid;
if (left < right) {
mid = (left + right) / 2;
merge_sort(list, left, mid);
merge_sort(list, mid + 1, right);
merge(list, left, mid, right);
}
}
我分配了排序时需要的排序数组作为整数指针数组,因为我认为我需要分配二维数组每一行的收件人。
但问题似乎表明我与指针有关的基本想法是错误的。有人可以帮我解决这个问题吗?
【问题讨论】:
-
int** info = (int**)malloc(sizeof(int*) * N);--info[i] = (int*)malloc(sizeof(int) * 2);-- 你为什么不在这里使用std::vector?如果你这样做了,你可能有机会找出问题所在,因为vector有一个检查数组边界的at()函数。 -
我在这里看不到任何套装! malloc 应该创建一个吗?也许你需要标准集?