如何在main中调用选择排序函数

How to call the selection sort function in main

本文关键字:选择 排序 函数 调用 main      更新时间:2023-10-16

所以问题是在上面的分级程序中添加选择排序函数。程序应该按升序显示成绩列表,我们正在提供选择排序功能,不能更改它,我的问题是如何从主功能调用它

这是我的代码`

#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;
}

`

我认为您的问题是希望"排序"函数返回一个值;事实并非如此。

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

数组通过引用传递给函数;这意味着,一旦函数返回,排序函数中对数组所做的所有更改都仍然存在;因此,您应该输出"grades"数组,而不是不存在的返回值。

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

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"在未定义的情况下被使用。

一旦我改变了这一点,程序就会运行,但"排序"功能无法正常工作。这就引出了第二个问题:对于"i"的每次迭代,都需要重置变量"min_value"answers"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;
}