C++ 按一列对二维数组进行气泡排序

C++ 按一列对二维数组进行气泡排序,c++,visual-c++,C++,Visual C++,我必须按列对矩阵进行排序;作为输入,我有一个一维数组,并将其转换为矩阵: int arr[] = { 6, 7, 3, 1, 3, 2, 4, 4, 7, 5, 1, 1, 5, 6, 6, 4, 5 }; 列中的第一个元素是值,第二个元素是外观数。我必须按第一列的值对它们进行排序。这就是我迄今为止所尝试的 直方图.h #ifndef HISTOGRAM_H #define HISTOGRAM_H #include<iostream> class Histogram { priva

我必须按列对矩阵进行排序;作为输入,我有一个一维数组,并将其转换为矩阵:

int arr[] = { 6, 7, 3, 1, 3, 2, 4, 4, 7, 5, 1, 1, 5, 6, 6, 4, 5 };
列中的第一个元素是值,第二个元素是外观数。我必须按第一列的值对它们进行排序。这就是我迄今为止所尝试的

直方图.h

#ifndef HISTOGRAM_H
#define HISTOGRAM_H
#include<iostream>
class Histogram
{
private:
    int** matrix;
    int lines;
    void SortMatrix();
public:
    Histogram(){ }
    Histogram(int elements[], int elementsNr);
    Histogram(int** m, int l);
    void Print();
};
#endif
相反:

1:3
2:1
3:2
4:3
5:3
6:3
7:2
试试这个:

for (int i = 0; (i < lines - 1); i++) {

    for (int o = 0; (o < lines - 1); o++) {

        if ( matrix[ i ][0] < matrix[ o ][0] ) {

            temp1 = matrix[ i ][0];
            temp2 = matrix[ i ][1];

            matrix[ i ][0] = matrix[ o ][0];
            matrix[ i ][1] = matrix[ o ][1];

            matrix[ o ][0] = temp1;
            matrix[ o ][1] = temp2;

        }

    }

}
您需要两个循环来排序。我相信您没有正确地实现这一点,因为下面的演示表明它是有效的


演示如何转换数组如果这是冒泡排序,则需要2个循环,而不仅仅是1个循环。@David第二列是第一列中的值在原始1D数组中出现的次数。作为输入,我有数组:int arr[]={6,7,3,3,2,4,4,7,5,1,5,6,6,4,5};左边的数字是数组中的值,右边的数字是数组中出现的数字。@laura:你为什么使用这样糟糕的排序算法?或者,更妙的是:首先为什么要编写排序实现?“这是家庭作业吗?”劳拉试试我的编辑。它对我有用。顺便问一下,国旗是用来干什么的@laura你是如何实例化直方图类的?@laura还有,什么是INT_MIN?我的编译器告诉我一个错误。
1:3
2:1
3:2
4:3
5:3
6:3
7:2
for (int i = 0; (i < lines - 1); i++) {

    for (int o = 0; (o < lines - 1); o++) {

        if ( matrix[ i ][0] < matrix[ o ][0] ) {

            temp1 = matrix[ i ][0];
            temp2 = matrix[ i ][1];

            matrix[ i ][0] = matrix[ o ][0];
            matrix[ i ][1] = matrix[ o ][1];

            matrix[ o ][0] = temp1;
            matrix[ o ][1] = temp2;

        }

    }

}