如何在main中调用选择排序函数
How to call the selection sort function in main
所以问题是在上面的分级程序中添加选择排序函数。程序应该按升序显示成绩列表,我们正在提供选择排序功能,不能更改它,我的问题是如何从主功能调用它
这是我的代码`
#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;
}
相关文章:
- C++选择排序算法中的逻辑错误
- 高级选择排序 - 在一次迭代中搜索两个元素
- 选择排序C++(已修改)并非适用于所有情况
- C++为什么我的指针选择排序中存在分段错误?
- 为什么这个选择排序算法仍然切换一个元素,当它已经是其他元素中最小的元素时?
- 选择排序时交换函数调用的数量和完成的交换次数是否相同?
- 如何使用cpp编写选择排序算法以降序对元素列表进行排序?
- 使用选择排序对数组数据结构进行排序,但它不起作用
- c++ 选择排序在特定情况下不起作用
- 修改的选择排序,选择最大的数字,然后交换到最后
- 如何选择排序一些结构
- 选择排序以查找未排序数组中的最大数字
- 我的选择排序代码是否存在导致它跳过数组中的元素的问题?
- 给定数组范围的选择排序问题
- 选择排序算法生成无序结果
- 使用C 中的一系列字符串的选择排序
- 从递归向后选择排序函数调用 max 和交换函数
- 为 STL 列表编写选择排序
- 跟踪选择排序中的交换和比较次数
- 字母选择排序程序的问题