我如何使用冒泡排序将4个阵列从最小到最大排序? C ++

时间:2017-07-13 01:16:29

标签: c++

我有4个相互平行的阵列。其中一个数组包含一个整数值。我应该使保存整数值的数组从最小整数值排序到最大整数值。我感到困惑的部分是在使用冒泡排序技术后,我的其他3个与整数数组并行的数组不再平行,因为下标值已更改。如何使我的其他3个数组与新的整数数组值并行。假设我有IntegerArray [0] = 2 IntegerArray [1] = 1然后我按顺序对它进行排序IntegerArray [0] = 1 IntegerArray [1] = 2我如何确保我的其他数组是并行的?说IntegerArray [0] = 2(排序前的原始版本)与NameArray [0] = Greg NameArray [1] = George并行,如果我运行for循环来打印我的数组值我将如何使它成为名称数组将与我的排序整数数组并行?除了名称数组之外,我还有另外两个需要并行的数组。

2 个答案:

答案 0 :(得分:0)

对4个并行数组进行排序的方式与对单个数组进行排序的方式完全相同,除了在交换单个数组的两个值的部分之外,您可以在所有4个数组中交换相应的索引。

另一种方法是将数组“压缩”为单个类对象数组并对其进行排序。这允许您使用常规排序算法而不更改交换,但当然需要对并行数组进行压缩和解压缩。

答案 1 :(得分:0)

对并行数组进行排序的一种方法是不对数组本身进行排序,而是将指向第一个,第二个,第三个等项的索引值数组排序到数组中。

以下是一个例子:

#include <iostream>
#include <algorithm>
#include <string>

int main()
{
    std::string names[5] = { "Jack", "Joe", "Alice", "Bob", "Carol" };
    int grades[5] = { 80, 75, 90, 95, 68 };
    //...
    int index[5] = { 0,1,2,3,4 };
    //...
    // perform bubble sort on the grades in ascending order
    for (int i = 0; i < 5; ++i)
    {
        for (int j = 0; j < 4; ++j)
            if (grades[index[j]] > grades[index[j+1]])
                std::swap(index[j], index[j+1]);
    }

    // print out the sorted values, sorted by grade in ascending order
    for (int i = 0; i < 5; ++i)
        std::cout << names[index[i]] << " " << grades[index[i]] << "\n";
}

Live Example

请注意,实际交换的唯一内容是索引数组中的值。具有实际数据的数组永远不会更改。