【问题标题】:Sorting a 2D array using the second column C++使用第二列 C++ 对二维数组进行排序
【发布时间】:2015-04-18 02:36:32
【问题描述】:

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

这是我要排序的数组:

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

提前致谢。

【问题讨论】:

  • 谢谢大家的帮助。我终于让它工作了。 :)

标签: c++ arrays sorting 2d


【解决方案1】:

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

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

请注意,我们可以利用标准实用程序使此代码更易于理解。我写的那行是//same as before...你在那儿做的只是交换names[i]names[j],我们可以拼写:

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

这更容易理解,也更不容易出错。

【讨论】:

    【解决方案2】:

    你弄错了冒泡排序。试试这个:

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

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 2021-05-03
      • 2011-10-25
      • 2013-12-16
      • 2013-08-17
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      相关资源
      最近更新 更多