基本选择排序代码

时间:2014-12-25 08:48:13

标签: c++

我是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;
}

3 个答案:

答案 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;
        }