1

我正在学习 C++ 编程,但在使用基本数组排序程序时遇到了问题。我的代码似乎没有抛出任何编译器错误——VisualStudio2012 没有显示任何错误。此外,它看起来与我在教程 (learncpp.com) 中找到的代码一模一样。

输出应该在其选择排序的每一步都显示一个数组。但是,我不断得到不同的随机字母和数字输出。这是内存问题吗?或者是其他东西?

此外,注释掉的“if”循环是我如何在 1 行而不是 2 行代码中交换数组元素。这对排序有用吗?

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

int _tmain(int argc, _TCHAR* argv[])
{
using namespace std;

const int nSize = 6;
int anArray[nSize] = {30, 60, 20, 50, 40, 10};

for (int nStartIndex = 0; nStartIndex < nSize; nStartIndex++){
    int nSmallestIndex = nStartIndex;

    for (int nCurrentIndex = nSmallestIndex + 1; nCurrentIndex < nSize; nCurrentIndex++){


    /*  if (anArray[nCurrentIndex] < anArray[nSmallestIndex])
            swap(anArray[nSmallestIndex], anArray[nCurrentIndex]);
    */

        if (anArray[nCurrentIndex] < anArray[nSmallestIndex])
        nSmallestIndex = nCurrentIndex;
    }

    swap(anArray[nStartIndex], anArray[nSmallestIndex]);

    cout << "The current array: \t" << anArray << "\n";

}

return 0;

}

4

3 回答 3

1

您显示0x23abcd的内容是内存地址。您实际上是在显示指向数组中第一个元素的指针。要在 C++11 中正确显示数组,最好的方法是使用 range-for 循环:

for(int &i : anArray)
        std::cout << i << " ";
于 2013-07-23T16:15:24.573 回答
1

也许您应该尝试使用循环来输出数组的内容。

for(int i=0; i<anArray.size(); i++)
    std::cout<< anArray[i] << " ";

编辑:@awesomeyi 给出的解决方案看起来更优雅。

于 2013-07-23T16:19:59.987 回答
0

而不是代码部分:

cout << "The current array: \t" << anArray << "\n";

用这个

cout << "The current array: \t";
for(int i=0;i<nSize;i++)
{
    cout<<anArray[i]<<" ";
}
cout<<endl;

我认为这将起作用,另一件事是,当您使用标头<algorithm>时,您可以使用函数sort()对复杂的数组进行排序nlogn。这里有一个例子

#include <iostream>
#include <algorithm>

int main()
{
using namespace std;

const int nSize = 6;
int anArray[nSize] = {30, 60, 20, 50, 40, 10};

sort(anArray,anArray+6);

    cout << "The current array: \t";
    for(int i=0;i<nSize;i++)
    {
        cout<<anArray[i]<<" ";
    }
    cout<<endl;



return 0;
}
于 2013-07-23T16:35:14.093 回答