如何在main中调用选择排序功能

时间:2016-03-26 19:11:47

标签: c++ sorting

所以问题是在上面的评分程序中添加选择排序功能。程序应按升序排序显示等级列表,我们给出了选择排序功能并且无法更改它,我的问题是如何从主函数中调用它

这是我的代码`

#include <iostream>
using namespace std;

double average(double x[], int n);
double maximum(double x[], int n);
double minimum(double x[], int n);
int nAboveAvg(double x[], int n);
void sort(double x[], int npts);


int main()
{
   double grades[50];
   int ngrades;

   cout<<"How many grades? (max = 50) ";
   cin>>ngrades;

   //create for loop to get grades from user
   for(int i = 0; i<ngrades; i++)
   {
      cout<<"Enter grade ";
      cin>> grades[i];
      while(grades[i]< 0 || grades[i] > 100)
      {
          cout<<"Invalid grade- please enter again"<<endl;
          cin>>grades[i];
      }
   }

   //call the functions
   double avg = average(grades, ngrades);
   double max = maximum(grades, ngrades);
   double min = minimum(grades, ngrades);
   int nAbove = nAboveAvg(grades, ngrades);

       //Calling the sort function
   sor = sort(grades, ngrades);
   //display results



   cout << "Average = " << avg << endl;
   cout << "# above average = " << nAbove << endl;
   cout<<"Max value is = "<<max<<endl;
   cout<<"Min value is = "<<min<<endl;
   cout<<"Array sorted "<<sor<<endl;

}

void sort(double x[], int npts)
{
  double min_value;
  int min_index;
  double temp;
  for(int i= 0; i<npts - 1; i++)
  {
      for(int j = i + 1; j<npts; j++)
      {
          if(x[j] < min_value)
          {
              min_value = x[i];
              min_index = j;
          }
      }

      temp = x[min_index];
      x[min_index] = x[i];
      x[i] = temp;
  }
  return;
}

`

1 个答案:

答案 0 :(得分:1)

我认为你的问题是你希望“sort”函数返回一个值;它没有。

“sort”函数不返回值,因为它是使用“void”返回值定义的,因此尝试从变量“sort”中检索任何数据都不起作用(或者不应该)。

通过引用将数组传入函数;这意味着一旦函数返回,sort函数中对数组所做的所有更改仍然存在;因此,您应该输出“等级”数组,而不是不存在的返回值。

编辑:我相信你的问题在于:

cout<<"Array sorted "<<sor<<endl;

尝试这样的事情:

for (int i = 0; i < ngrades; ++i)
{
    cout << grades[i] << " ";
}

cout << endl;

编辑2:另外,更改行:

sor = sort(grades, ngrades);

只是:

sort(grades, ngrades);

编辑3:事实证明“排序”功能存在一些问题。第一个也是最糟糕的问题是变量“min_value”正在被使用而没有被定义。

一旦我改变了这个,程序就会运行,但“sort”功能无法正常工作。 这让我想到了第二个问题:每次迭代“i”都需要重置变量“min_value”和“min_index”。

最后一个问题是,在“j”循环中,“min_value”被分配给“x [i]”,而它应该被分配给“x [j]”:

min_value = x[i];
min_index = j;

应该是:

min_value = x[j];
min_index = j;

我修复了该功能并对其进行了测试以确保其正常工作。 这是代码。

void sort(double x[], int npts)
{
    double min_value;
    int min_index;
    double temp;

    for (int i = 0; i < npts - 1; i++)
    {
        min_value = x[i];
        min_index = i;

        for (int j = i + 1; j < npts; j++)
        {
            if (x[j] < min_value)
            {
                min_value = x[j];
                min_index = j;
            }
        }

        temp = x[min_index];
        x[min_index] = x[i];
        x[i] = temp;
    } 

     return;
}