0

我对 c++ 编程还很陌生,我需要编码方面的帮助,以便将文本文件中的数字按升序排序,这样我就可以取它的中位数,但我不知道该怎么做。

到目前为止,这是我的代码:

//Create a Vector to hold a set of exam scores.Write a program to do the following tasks: 1. Read exam scores into a vector from Scores.txt 
//2. Display scores in rows of five(5) scores.
//3. Calculate average score and display.
//4. Find the median score and display.
//5. Compute the Standard Deviation and display

#include <vector>
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

int main ()
{   const int array_size = 36; // array size
    int numbers[array_size]; //array with 36 elements
    int count = 0;
    int column_count = 5;
    ifstream inputfile; //input file into stream object
    //open file
    inputfile.open("Scores.txt");
    //read file
    while (count < array_size && inputfile >> numbers[count])
        count++;
    //close file
    inputfile.close(); 
    //display numbers read
    for (count = 0; count < array_size; count++) {
    cout << numbers[count] << " ";
    if ( count % column_count == column_count - 1 ) {
         cout << "\n";
    }
}

    //find the average
        double average; //average
        double total = 0; //initialize accumulator
        cout << "\nAverage:\n";
        for (count = 0; count < array_size; count++)
            total += numbers[count];
        average = total/array_size;
        cout << average << " ";
        cout << endl;

    //find the median
        std::sort(numbers.begin(), numbers.end(), std::greater<int>());





        system ("pause");

        return 0;
}

提前致谢!

4

3 回答 3

1
#include <algorithm>

// ...
std::sort( numbers, numbers + array_size );
于 2012-11-13T04:14:19.427 回答
1

您可能从某个地方复制了这行代码,但不了解它的真正含义:

std::sort(numbers.begin(), numbers.end(), std::greater<int>());

由于您使用的是常规数组,因此第一个参数是指向数组中第一个位置的指针。第二个参数是指向数组中最后一个元素的指针。第三个参数指示数组应该在哪个方向排序(在你的情况下,你想找到中位数,所以方向无关紧要)。对于长度为 的名为 numbers 的数组array_size,新的函数调用被重写为:

std::sort(&(numbers[0]), &(numbers[array_size]), std::greater<int>());

将数组传递给函数时,它们会自行衰减为指针。因此,您不需要使用&运算符。函数调用可以简化为:

std::sort(numbers, numbers + array_size, std::greater<int>());

在这种情况下对数据进行排序的目的是找到中位数。无论对数组进行升序还是降序排序,中间元素的平均值都是相同的。如果您对需要按升序排序的数组有进一步的用途,请将第三个参数更改为std::less<int>()(或完全删除)。它将导致数组按升序排序。

std::sort(numbers, numbers + array_size);
于 2012-11-13T04:20:57.883 回答
0

对于 std::sort(...) 函数,请参考http://www.cplusplus.com/reference/algorithm/sort/。对于您的问题,您正在处理内置类型。不采用“比较”参数的 std::sort 的第一个重载版本就足够了。如果你不认为,你需要指定“更少”而不是“更大”

于 2012-11-13T04:17:35.877 回答