无法将数组传递给排序函数(需要对列进行排序,而不是对行进行排序)

Can't pass array to a sorting function(need to sort columns, not rows)

本文关键字:排序 数组 函数      更新时间:2023-10-16

我需要使用选择排序来对二维数组进行排序。问题是我需要对数组的列进行排序,而不是行。这是我分配二维数组的方式(显示结构(:

int** array = new int*[rows];
    for (int i = 0; i < rows; i++) {
        array[i] = new int[columns];
    }

然后我在其中添加了一些项目。这是我的排序功能:

void selectionSort(int* arr, int n)
{
    int i, j, min_idx;
    for (i = 0; i < n; i++)
    {
        min_idx = i;
        for (j = i + 1; j < n; j++)
            if (arr[j] < arr[min_idx])
                min_idx = j;
        swap(&arr[min_idx], &arr[i]);
    }
}

我没有指定互换,因为它是不言自明的。

因此,我需要对矩阵的每一列进行分类。例如:

输入:

5 3 1

2 0 9

4 2 6

输出:

2 0 1

4 2 6

5 3 9

关于如何做的任何想法?现在,我对矩阵进行了两次矩阵,并且在换位之间进行排序,但是我认为这不是一个好选择,因为它的慢速。

template <typename F>
void selectionSort(F f, int size)
{
    for (int i = 0; i < size; i++)
    {
        int min_idx = i;
        for (int j = i + 1; j < size; j++)
            if (f(j) < f(min_idx))
                min_idx = j;
        swap(f(min_idx), f(i));
    }
}

所以,在一个维度上,您有旧的:

selectionSort([arr](int i) -> int&{ return arr[i]; }, n);

和列:

selectionSort([arr, j](int i) -> int&{ return arr[i][j]; }, n);