我试图找出如何冒泡排序二维字符串数组。我目前套牢试图找出为什么我的心不是程序排序字符串。我spsupect它可能是可能的,什么是错与无效掉。我觉得需要服用点与二维数组被摆在那里。我不是很肯定,我只是学会了如何创建冒泡排序算法。
#包括
using namespace std;
const int SIZE = 2;
const int ROWS = 2;
void bubbleSort(string values[][SIZE]);
void swap(int &, int &);
int main ()
{
string values[ROWS][SIZE] = {{"A23", "A12"}, {"name1", "name2"}};
cout << "Unsorted Values: " << endl;
for(auto element : values)
cout << element << " ";
cout << endl;
cout << "Sorted Values" << endl;
bubbleSort(values);
for (auto element:values)
cout << element << " ";
return 0;
}
void bubbleSort(string values[][SIZE])
{
int maxElement;
int index;
for (maxElement = SIZE - 1; maxElement > 0; maxElement--)
{
for( index = 0; index < maxElement; index++)
{
if (values[0][index] > values[0][index + 1])
{
swap(values[0][index], values[0][index + 1]);
}
}
}
}
void swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
你的程序打印出不会忽略,因为打印循环遍历字符串的二维数组的每个条目。因此,每个条目是一个数组。所以arr
保持的指针数组的第一个元素。你只需要一个嵌套循环来打印出单一元素的值:
for (auto row : values)
for (int i = 0; i < SIZE; i++)
std::cout << row[i] << " ";
此外,也没有必要实现一个自己的交换功能。只要使用std::swap(T&,T&)
但我认为要实现一机多数组排序。那么你应该使用一个简单的结构来表示实体,而不是多个阵列和实施符来比较两个实体。我建议使用基于容器的范围太。然后,你可以采取的标准排序功能的优势。
#include <string>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct Entry
{
string id;
string name;
bool operator<(const Entry& comp)
{
return id < comp.id;
}
};
int main()
{
auto print = [](const vector<Entry>& vec)
{
for (auto& el : vec)
{
cout << el.id << "->" << el.name << "\t";
}
};
vector<Entry> values { {"A23","name1" }, {"A12", "name2"} };
cout << "Unsorted Values: " << endl;
print(values);
cout << endl;
std::sort(values.begin(), values.end());
cout << "Sorted Values" << endl;
print(values);
return 0;
}
打印出来:
Unsorted Values:
A23->name1 A12->name2
Sorted Values:
A12->name2 A23->name1