c++ - 使用第二列对二维数组进行排序 C++

标签 c++ arrays sorting 2d

我必须根据第二列对排名和名称(用作字符串)的二维数组进行排序。我试图按字母顺序对其进行排序,但似乎无法正确排序。我对多维数组还是新手,所以我仍然很困惑。我正在使用冒泡排序,它正在对名称进行排序,但顺序不正确。

这是我要排序的数组:

const int ROWS=6;
const int COLS=2;

string names [ROWS][COLS] = { "1", "Jacob",
                              "2", "Michael",
                              "3", "Joshua",
                              "4", "Matthew",
                              "5", "Ethan",
                              "6", "Andrew"};

这就是我得到的:

2 Michael
4 Matthew
3 Joshua
1 Jacob
6 Andrew
5 Ethan

这是我正在使用的排序函数:

void sort (string names [][COLS], int size)
{    
    int i,j; // i = rows 
    string hold1, hold2;

    for (i=0; i < size-1; i++)
    {
        for (j=0; j < size; j++)
        {
            if (names [i][1] > names [j][1]) //names  = col 1 , rank = col 0
            {
                hold1 = names [i][1];
                hold2 = names [i][0];
                names [i][1] = names [j][1];
                names [i][0] = names [j][0];
                names [j][1] = hold1;
                names [j][0] = hold2;
            }
        }
    }
}

提前致谢。

最佳答案

您实际上是在来回交换元素。您需要确保在进行冒泡排序时,您仅将一个元素与后面元素进行比较。即:

for (i=0; i < size-1; i++)
{
    for (j=i+1; j < size; j++)
          ^^^^
    {
        // same as before
    }
}

请注意,我们可以利用标准实用程序来使此代码更容易理解。我写的行//与之前相同...你在那里所做的只是交换names[i]names[j],我们可以拼写:

std::swap(names[i], names[j]);

这更容易理解并且更不容易出错。

关于c++ - 使用第二列对二维数组进行排序 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29712274/

相关文章:

java - 如何在同一个对话框中显示直接输入和排序的ArrayList

c++ - 使用 "Enterprise Architect"逆向工程 C++ 代码

c++ - 如何将 _bstr_t 转换为 CString

c - *(q + i * col + j)在此C程序中如何工作?

java - java中的随机数组值

linux - 不使用 -S 选项对 ls -alh 的输出值进行排序

C++ 索引超出数组的大小

c++ - cmake:查找/添加 Visual Studio 或 windows sdk 库和头文件的正确方法?

c++ - 如何初始化作为类成员的数组?

unix - 如何在不使用临时文件的情况下合并已排序的文件?