C++ 在+中选择排序并行数组+;

C++ 在+中选择排序并行数组+;,c++,arrays,sorting,selection-sort,parallel-arrays,C++,Arrays,Sorting,Selection Sort,Parallel Arrays,免责声明:我知道并行阵列很糟糕,应该避免使用,选择排序不是最有效的排序,但在这种情况下,这是老板想要的方式。我看过很多不同的网站,没有一个能真正找到答案。另外,很可能指出我是C++新手,只知道相当基本的编码和调试。 我有两个简单的并行数组,正在尝试设计一个简单的选择排序,对其中一个数组进行排序,然后相应地交换第二个数组中的元素。我让选择排序部分工作,但它似乎无法正确交换第二个数组中的元素 以下是我的输出: 1(吉伯里什语) 2(吉伯里什语) 3(吉伯里什语) 4(吉伯里什语) 5(吉伯里什语)

免责声明:我知道并行阵列很糟糕,应该避免使用,选择排序不是最有效的排序,但在这种情况下,这是老板想要的方式。我看过很多不同的网站,没有一个能真正找到答案。另外,很可能指出我是C++新手,只知道相当基本的编码和调试。 我有两个简单的并行数组,正在尝试设计一个简单的选择排序,对其中一个数组进行排序,然后相应地交换第二个数组中的元素。我让选择排序部分工作,但它似乎无法正确交换第二个数组中的元素

以下是我的输出:

1(吉伯里什语)
2(吉伯里什语)
3(吉伯里什语)
4(吉伯里什语)
5(吉伯里什语)

在我这里(jibberish),控制台没有形成任何可识别的字母,只是奇怪的形状(如果有用的话,最后一个输出元素是心脏)

下面是它应该是什么样子:

1A
2b
3c
4d
5e

现在我意识到,在这个场景中,我可以很容易地在第二个数组上运行选择排序,但我的重点是让第二个数组交换元素,这些元素与选择排序对第一个数组所做的操作相对应

有没有办法让这些阵列正确排列?我一天中的大部分时间都在试图解决这个问题,我确信这是一件相当简单的事情,但我的大脑被击中了

下面是我的代码,提前感谢您查看

#include "stdafx.h"
#include <iostream>

using namespace std;


//Function Prototypes
void sort(int num[], char alph[], int size);





//Selection sort function
void sort(int num[], char alph[], int size)
{
int startScan;
int minIndex;
int minValue;

for (startScan = 0; startScan < (size - 1); startScan++)    //Moves through the elements
{
    minIndex = startScan;
    minValue = num[startScan];

    int index = 0;

    for (index = startScan + 1; index < size; index++)  //Compares the elements
    {
        if (num[index] < minValue)
        {
            minValue = num[index];
            minIndex = index;
        }
    }

    num[minIndex] = num[startScan];
    num[startScan] = minValue;

    alph[minIndex] = alph[startScan];
    alph[startScan] = alph[index];
}
}






//Main
int _tmain(int argc, _TCHAR* argv[])
{
int num[] = {5, 3, 1, 4, 2};
char alph[] = { 'e', 'c', 'a', 'd', 'b' };
int const SIZE = 5;


//Prints out unsorted array
cout << "This is the unsorted arrays." << endl;
cout << endl;

for (int count = 0; count < SIZE; count++)
{
    cout << num[count] << " \t ";
    cout << alph[count] << endl;
}

cout << endl;
cout << endl;


//Calls the sort function
sort(num, alph, SIZE);


//Prints out the sorted array
cout << "This is the sorted array." << endl;
cout << endl;

for (int count = 0; count < SIZE; count++)
{
    cout << num[count] << " \t";
    cout << alph[count] << endl;
}


//Pause
char temp[50];
cin >> temp;


return 0;
}
#包括“stdafx.h”
#包括
使用名称空间std;
//功能原型
无效排序(int num[],char alph[],int size);
//选择排序函数
无效排序(int num[],char alph[],int size)
{
int startScan;
int-minIndex;
int-minValue;
for(startScan=0;startScan<(大小-1);startScan++)//在元素中移动
{
minIndex=startScan;
minValue=num[startScan];
int指数=0;
for(index=startScan+1;index
alph[minIndex] = num[startScan];
第二条故障线路:

alph[startScan] = alph[index];
应该是:

alph[startScan] = alph[minIndex];
当代码退出内部循环时,size的值超过数组大小1


我建议:使用IDE和调试器来跟踪代码执行和检查变量。此外,我的第一个提示应该让您查看错误的索引。C++不关心默认情况下检查数组边界。通常在越界或错误指针之后会被垃圾。可以通过选择来补救第一个问题。用于检查数组边界的编译器选项。这将在开发期间降低应用程序的速度,但一旦一切正常运行,就可以将其删除。

最好的解决方案可能是更改

num[minIndex] = num[startScan];
num[startScan] = minValue;

char  temp=alph[minIndex];
alph[minIndex] = alph[startScan];
alph[startScan] = temp;
对于这项工作来说,真的是再简单不过了

std::swap(num[minIndex], num[startScan]);
std::swap(alph[minIndex],alph[startScan]);

谢谢你指点出来!在所有的东西看起来都是一样的之前,你只能盯着东西看。我现在得到第二个数组的最后一个元素,打印出来,但是前四个仍然是乱七八糟的。谢谢你的提示!我忘了C++编译器没有检查任何越界错误!我一定要看看学习。ng关于调试的更多信息,再次感谢您的提示和提示!我忘了提到您需要一个临时变量来正确交换字母数字字符。另一个问题是您刚刚修复的行下面的行存储了minValue的值,您需要在更改car数组时执行同样的操作。这样做了。我添加了一个新变量,temp,并使其基本上作为另一个minValue运行。我将为其他试图解决此问题的人发布我的新代码。感谢您的帮助。这是一个非常简单、优雅的解决方案。我以前见过“.swap”,但它从未起作用(显然它仅用于字符串?).无论如何,这很好,并且清理了一点代码。谢谢!不,这对任何东西都有效。查看cppreference的列表:我爱那些人,他们很棒。当谷歌过去允许你禁止搜索结果时,我会禁止cplusplus.com,只获取cppreference。
std::swap(num[minIndex], num[startScan]);
std::swap(alph[minIndex],alph[startScan]);