C++对2D字符数组进行气泡排序

C++ Issues Bubble Sorting a 2D char Array

本文关键字:气泡 排序 数组 2D 字符 C++      更新时间:2023-10-16

这个问题是关于我为赋值编写的代码,所以是的,我必须使用冒泡排序,是的,我们必须使用数组。

好吧,我正在对一维数组进行精细的气泡排序,但试图对二维数组进行排序会让我很难过。

我想做的是按字母顺序排列一张名单(如乔、鲍勃、贝蒂、杰克)。使用以下代码,程序试图对事物进行排序(名称四处移动),但通常只有部分正确。

#include <iostream>
#include <fstream>
using namespace std;
void AlphaSort(char [][50]);
void GetInput(char [][50]);
void PrintArray(char [][50]);
int main()
{
char name[4][50];
cout << "Please enter 4 names:n";
GetInput(name);
cout << endl << "The following names were received:n";
PrintArray(name);
cout << endl << "The names will now be sorted.nn"
<< "Calling Sort Function....n";
AlphaSort(name);
cout << endl << "The sorted name order is now:n";
PrintArray(name);
return 0;
}
void GetInput(char name[][50])
{
int i;
for(i=0; i<4; i++)
cin.getline(name[i], 50);
}
void PrintArray(char name[][50])
{
int i;
for(i=0; i<4; i++)
cout << name[i] << endl;
}
void AlphaSort(char name[][50]) //I'm pretty sure the problem is in here.
{
int Nnames = 4, pass, column, row, letter, sorted;
char temp[50];
cout << "Sorting Function Successfully Called...n"
<< endl << "Names recieved by sort function:n";
PrintArray(name);
//Specifically in this attempt at a bubble sort.
for(pass=0; pass<(Nnames-1); pass++)
{
for(row=0; row<(Nnames-pass-1); row++)
{
for(column=0, sorted=0; sorted==0; column++)
{
if(name[row][column]>name[row+1][column])
{
for(letter=0; letter<50; letter++)
temp[letter] = name[row][letter];
for(letter=0; letter<50; letter++)
name[row][letter]= name[row+1][letter];
for(letter=0; letter<50; letter++)
name[row+1][letter] = temp[letter];
sorted = 1;
}
else if (name[row][column] == name[row+1][column]);
}
}
}    
cout << endl << "Name order post sort:n";
PrintArray(name);
}

当前运行此程序通常是这样的。

请输入4个名字:哈米·哈里·阿什·亚伦

收到了以下名字:哈米·哈里·阿什·亚伦

现在将对名称进行排序。

正在调用排序函数。。。。已成功调用排序函数。。。

排序函数接收的名称:Hammy Harry Ashe Aaron

姓名订单邮寄排序:Aaron Ashe Harry Hammy

现在排序的名字顺序是:Aaron Ashe Harry Hammy

我一直在寻找类似的问题,但我不明白为什么它很愚蠢。

我的问题似乎在于我的if语句没有解决它已经处于正确顺序的可能性,这使它循环,直到后来发现一个要切换的字母。固定代码如下:

void AlphaSort(char name[][50])
{
int Nnames = 4, pass, column, row, letter, sorted;
char temp[50];
cout << "Sorting Function Successfully Called...n"
<< endl << "Names recieved by sort function:n";
PrintArray(name);
for(pass=0; pass<(Nnames-1); pass++)
{
for(row=0; row<(Nnames-pass-1); row++)
{
for(column=0, sorted=0; sorted==0; column++)
{
if(name[row][column]>name[row+1][column])
{
for(letter=0; letter<50; letter++)
        temp[letter] = name[row][letter];
for(letter=0; letter<50; letter++)
        name[row][letter]= name[row+1][letter];
for(letter=0; letter<50; letter++)
        name[row+1][letter] = temp[letter];
sorted = 1;
}
else if (name[row][column]<name[row+1][column])//This is the fix.
sorted = 1;
}
}
}    
cout << endl << "Name order post sort:n";
PrintArray(name);
}