选择排序算法的结果不正确

时间:2014-09-06 20:37:26

标签: c++

#include <iostream> 
using namespace std;

// Selection Sort function.
// Parameter 'a' is the size of the array.
void ss(int AR[] , int a) {
    int small;
    for (int i = 0 ; i <a ; i++) {
        small = AR[i]; 
        for (int j = i+1 ; j <a ; j++) {
            if (AR[j]< small) {
                int k = AR[j];
                AR[j] = AR[i]; 
                AR[i] = k;
            }
        }
    }
}

int main() {
    cout << "Enter the size of Your Aray";
    int a;
    cin >> a;
    int AR[a];
    cout << endl; 
    for (int i = 0; i < a; i++) {
        cin >> AR[i];
        cout << endl;
    }
    ss(AR, a);
    cout << "The Sorted Array is"; 
    for (int i=0; i < a; i++) {
        cout << AR[i] << " ";  
        cout << endl;
    }
}

当我输入以下内容时:

  • 15
  • 6
  • 13
  • 22
  • 23
  • 52
  • 2

返回的结果是:

  • 2
  • 13
  • 6
  • 15
  • 22
  • 23
  • 52

阻止列表按预期进行数字排序的错误是什么?

3 个答案:

答案 0 :(得分:1)

该功能可以看起来像

void ss ( int a[], size_t n )
{
   for ( size_t i = 0 ; i < n ; i++ )
   { 
      size _t small = i;

      for ( size_t  j = i + 1; j < n ; j++ )
      {
         if  ( a[j] < a[small] ) small = j;
      }

      if ( i != small )
      {
         int tmp = a[small];
         a[small] = a[i];
         a[i] = tmp;
      } 
   }
}

答案 1 :(得分:0)

它似乎不是我所知道的SelectionSort。在每个循环中我知道的算法中,我寻找右子阵列中的最小元素,然后将其与&#34; pivot&#34;交换。循环的元素。这是算法

void selectionSort(int* a, int dim)
{
   int posMin , aux;
   for(int i = 0; i < dim - 1; ++i)
   {
      posMin = i;
      for(int j = i + 1; j < dim; ++j)
      {
         if(a[j] < a[posMin])
            posMin = j;
      }
      aux = a[i];
      a[i] = a[posMin];
      a[posMin] = aux;
   }
}

似乎你改变了你找到的每个较小的元素,但也改变了&#34; pivot&#34;的位置。我希望答案很明确。

答案 2 :(得分:0)

在原始函数中一切正常,只有在切换两个向量元素时才需要刷新small变量。 同样在if语句中将small变量设置为新值AR[i]