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

C++ 使用第二列C+对二维数组进行排序+;,c++,arrays,sorting,2d,C++,Arrays,Sorting,2d,我必须根据第二列对列和名称(用作字符串)的2D数组进行排序。我正试着按字母顺序把它排序,但我好像没弄好。我还不熟悉多维数组,所以我还是很困惑。我使用的是气泡排序,它对名称进行排序,但顺序不对 这是我正在尝试排序的数组: const int ROWS=6; const int COLS=2; string names [ROWS][COLS] = { "1", "Jacob", "2", "Michael",

我必须根据第二列对列和名称(用作字符串)的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;
            }
        }
    }
}
void排序(字符串名称[][COLS],整数大小)
{    
int i,j;//i=行
字符串保持1,保持2;
对于(i=0;inames[j][1])//names=col 1,rank=col 0
{
hold1=名称[i][1];
hold2=名称[i][0];
姓名[i][1]=姓名[j][1];
姓名[i][0]=姓名[j][0];
姓名[j][1]=hold1;
名称[j][0]=hold2;
}
}
}
}

提前谢谢

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

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

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

你把气泡排序搞错了。试试这个:

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;
        }
    }
}
(i=0;i名称[j+1][1]) { hold1=名称[j][1]; hold2=名称[j][0]; 姓名[j][1]=姓名[j+1][1]; 名称[j][0]=名称[j+1][0]; 姓名[j+1][1]=hold1; 名称[j+1][0]=hold2; } } }
谢谢大家的帮助。我终于成功了。:)
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;
        }
    }
}