我是c ++的超级菜鸟。由于某种原因,这个排序代码不会工作,任何帮助将是非常感谢! 我尝试使用的方法是选择排序。
#include "stdafx.h"
#include <algorithm>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
const int nTotalSize = 5;
int data[nTotalSize] = { 7, 47, 1, 8, 2 };
for (int iii = 0; iii < 5; iii++)
{
int nCurrentSmall = iii;
for (int jjj = iii+1; jjj < nTotalSize; jjj++)
{
if (data[jjj] < data[iii])
{
nCurrentSmall = jjj;
}
}
swap(data[iii], data[nCurrentSmall]);
}
for (int iii = 0; iii < 5; iii++)
{
cout << data[iii] << endl;
}
return 0;
}
答案 0 :(得分:1)
提示:在寻找最小元素时,您需要与目前为止看到的最小值进行比较。你正在与其他东西进行比较。
答案 1 :(得分:1)
我做了一些简单的修改......
#include "stdafx.h"
#include <algorithm>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
const int nTotalSize = 5;
int data[nTotalSize] = { 7, 47, 1, 8, 2 };
for (int iii = 0; iii < nTotalSize-1; iii++)
{
int nCurrentSmall = iii;
for (int jjj = iii+1; jjj < nTotalSize; jjj++)
{
if (data[jjj] < data[nCurrentSmall])
{
nCurrentSmall = jjj;
}
}
swap(data[iii], data[nCurrentSmall]);
}
for (int iii = 0; iii < 5; iii++)
{
cout << data[iii] << endl;
}
return 0;
}
答案 2 :(得分:1)
你定义了:
int nCurrentSmall = iii;
但你没有使用它,因为它应该用于选择排序。
if (data[jjj] < data[iii])
{
nCurrentSmall = jjj;
}
这用于将数据[iii]的索引与每个元素数据[jjj]进行比较,并在元素小于当前项目时将iii的索引更改为当前项目的索引,但是因为你&#39;重新比较数据[iii]整个时间,它不起作用,因为变化的值是nCurrentSmall,而nCurrentSmall的值也应该是iii的值以反映变化。将其更改为:
if (data[jjj] < data[nCurrentSmall])
{
nCurrentSmall = jjj;
}