美好的一天,我的排序2d阵列工作正常。但是,如果我添加空格,事情会变得混乱而且无序......
这是没有空格的正常排序
0 1 2 3 4 5
0| a b c d e f
1| g h i j k l
Press any key to continue . . .
Descending
0 1 2 3 4 5
0| l k j i h g
1| f e d c b a
Ascending
0 1 2 3 4 5
1| a b c d e f
0| g h i j k l
但如果我将其中一个元素更改为空格并变得混乱且无序。
0 1 2 3 4 5
0| a c d e f
1| g h i j k l
Press any key to continue . . .
Descending
0 1 2 3 4 5
0| l k j i h g
1| f e d c a
Ascending
0 1 2 3 4 5
1| a c d e f
0| g h i j k l
我怎么能忽略这个空格并像这样排序?
0 1 2 3 4 5
0| a c d e f
1| g h i j k l
Press any key to continue . . .
Descending
0 1 2 3 4 5
0| l k j i h g
1| f e d c a
Ascending
0 1 2 3 4 5
1| a c d e f
0| g h i j k l
这是我的代码:
#include<iostream>
#include<string>
std::string myarray[3][6] = {{"a","b","c","d","e","f"},
{"g","h","i","j","k","l"},
{" "," "," "," "," "," "}}; //i made some allowance so that i can insert/delete
void display();
using namespace std;
int main(){
int Rows = 2;
int Cols = 6;
display();
system("pause");
//buble sort, ascending
cout<<"\nDescending" <<endl;
for(int x = 0; x<2; x++){
for(int y = 0; y<6;y++){
for(int z = 0;z<Cols*Rows-1; z++){
if(myarray[0][z]<myarray[0][z+1])
swap(myarray[0][z],myarray[0][z+1]);
}
}
}
display();
cout<<"\nAscending" <<endl;
for(int z = 0; z<6; z++){
cout<<" "<<z;
}
cout<<endl;
for(int x = 1; x>=0; x--){
cout<<x <<"|";
for(int y = 5; y>=0; y--){
cout<<" " <<myarray[x][y] <<" ";
}
cout<<endl;
}
}
//display
void display(){
cout<<endl;
for(int z = 0; z<6; z++){
cout<<" "<<z;
}
cout<<endl;
for(int x = 0; x<2; x++){
cout<<x <<"|";
for(int y = 0; y<6; y++){
cout<<" " <<myarray[x][y] <<" ";
}
cout<<endl;
}
}
答案 0 :(得分:0)
你不能
这些结果并非“凌乱而乱序”&#34 ;;计算机完全按照你的要求去做:对元素进行排序。默认情况下,' '
出现在所有字母之前。
通过调整排序算法以使用基本char < char
比较之外的其他内容,您可以使' '
进入排序顺序中的其他特定位置(永远不会更改),但是您的计算机无法猜测你是否意味着它代表'b'
,或'l'
,或'z'
或其他任何角色。这与#34;相反,忽略了空白&#34;。
如果元素将始终是拉丁字母的成员, if 只会有一个空格,而 if 则会只有字母表中缺少一个字母,然后你可以做一个预先排序步骤,将空白变成丢失的字母字符,然后排序,然后我想再将字符改回一个空格。但是:(a)老实说,为什么? (b)排序算法本身保持不变。