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

标签 c++ arrays sorting selection-sort

我需要使用选择排序对二维数组进行排序。问题是我需要对数组的列而不是行进行排序。 下面是我如何分配一个二维数组(以显示结构):

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

关于如何做到这一点有什么想法吗?现在我转置矩阵两次,在转置之间对它进行排序,但我认为这不是一个好的选择,因为它很慢。

最佳答案

您可以将您的函数模板化为具有 int 的 getter:

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);

关于c++ - 无法将数组传递给排序函数(需要对列而不是行进行排序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56328983/

相关文章:

c++ - 爬取 Windows 程序菜单信息 C++

c++ - 未在禁用的 QCheckBox 上调用 mousePressEvent()

arrays - 在 Swift 4 中解码没有 key 的 JSON

java - 如何在 Java 中用 null 初始化这个二维数组?

java - 我的冒泡排序不起作用

algorithm - 自行车与人的最佳配对——求算法证明

sorting - Lua - 对表进行排序并随机化关系

c++ - 按 Y 排序三角形顶点时知道中间顶点是左还是右?

c++ - 3D 阵列取消分配会导致段错误

java - 如何在数组末尾添加一个元素?