我无法对数组进行排序,并使用输入文件中的数据查找计算代码。任何帮助将不胜感激。我已经浏览了互联网,但仍然遇到了麻烦。
数组正在读取一个包含1,000个数字的data.txt文件。该数组应该随机读取其中的100个数字,并对该试验结果进行计算。
非常感谢任何帮助!
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cmath>
using namespace std;
// Declare global constants
const char* IN_FILE_NAME = "stats.txt";
const char* OUT_FILE_NAME = "results.txt";
const int ELEMENTS = 100;
// Function Prototypes
double findMean(double* elementArray, int ELEMENTS); // sum of numbers / how many numbers
double findMedian(double* elementArray, int ELEMENTS); // middle number
double findMinimum(double* elementArray, int ELEMENTS); //smallest number in the array
double findMaximum(double* elementArray, int ELEMENTS); //largest number in the array
double findStdDev(double* elementArray, int ELEMENTS); // sqrt( Sum * | x - mean |^2 ) / number of arrays
bool getTrialElements(std::ifstream& inFile, double* elementArray, int ELEMENTS);
double printTrialResults(std::ofstream& outFile, int trialNumber, double elementArray[], int ELEMENTS); //print to output file
void sortArray();
// This program performs basic statistics on a large set of data points
int main()
{
// Declare variables
ifstream inFile;
ofstream outFile;
int trialNumber = 0;
double elementArray[ELEMENTS];
// Open input and output files
inFile.open(IN_FILE_NAME);
outFile.open(OUT_FILE_NAME);
// Loop through all of the data sets in the input file
while(getTrialElements(inFile, elementArray, ELEMENTS))
{
// Keep track of the number of data sets processed
trialNumber++;
// Output the results to the output file
printTrialResults(outFile, trialNumber, elementArray, ELEMENTS);
}
// Close input and output files
outFile.close();
inFile.close();
return 0;
}
// Function definitions
double findMean(double elementArray[], int ELEMENTS)
//Find the mean of the array
{
double sum = 0;
for(int ELEMENT = 0; ELEMENT < 100, ELEMENT++)
{
sum = sum + elementArray[ELEMENT];
}
return sum / ELEMENTS;
}
double findMedian(double elementArray[], int ELEMENTS)
{
}
double findMinimum(double elementArray[], int ELEMENTS)
{
}
double findMaximum(double elementArray[], int ELEMENTS)
{
}
double findStdDev(double elementArray[], int ELEMENTS)
{
}
bool getTrialElements(std::ifstream& inFile, double* elementArray, int ELEMENTS)
{
//Read inFile in to elementArray
//for ELEMENTS
//if can't read or no more elements to read, return false, else return true
while(getTrialElements(inFile, elementArray, ELEMENTS))
{
if(ELEMENTS < 99)
{
cout << "No more elements available." << endl;
}
return 0;
}
}
double printTrialResults(std::ofstream& outFile, int trialNumber, double elementArray[], int ELEMENTS)
{
//
}
void sortArray()
{
}
答案 0 :(得分:0)
好吧,如果它只是关于排序,那么c ++ 11有一些工具。
std::begin
和std::end
适用于数组std::sort
执行所有其他工作所以:
int array[ELEMENTS]; // look for std::array<int, ELEMENTS>
... // fill array with values
std::sort(std::begin(array), std::end(array)); // sort full array
阅读:
表示原始指针:
void sortArray(int *begin, size_t size)
{
std::sort(begin, begin + size);
}
答案 1 :(得分:0)
这看起来像某种功课,所以最好不要给你一个完整的实现,但我会给你一些提示。
我假设您不太熟悉排序算法,因此请考虑查看bubbleSort
,selectionSort
和insertionSort
,而不是使用语言中构建的内容。
在对数据进行排序后,可以通过返回中间的元素(100个元素数组的第50个元素)来完成中位数。
最大值和最小值也可以从排序数组中找到(第一个和最后一个元素),或者您可以选择一个元素作为最小/最大元素,而不是将其与所有其他元素进行比较。如果元素值小于/大于您选择的值,则将拾取的值更改为元素的值。
int min = arr[0];
for(int i = 0;i < SIZE ;i++){
if(min > arr[i]){
min = arr[i];
}
答案 2 :(得分:0)
迭代开发:
首先创建一个数组来保存所有1000个数字,然后将该文件读入该数组并从数组中打印出来。
然后,在100次for循环中,滚动0到999之间的随机数,并将相关值放入较小的数组中。您需要检查一下,相同的值永远不会被取两次。你可以制作1000个bool&#34; value_used&#34;如果使用了特定的输入,则将它们设置为true,如果两次使用相同的输入,则使用while循环重新滚动。
在阵列中拥有100后,您需要对其进行排序。冒泡排序是最基本的排序类型,从0到98移动列表(0:99范围)。查看每个相邻的值对,并将最高的值换成右侧。这导致最高价值&#34;渗透&#34;一次通过顶部。然后你做了第二次传球,但是停了一次,第三次传球停了2次,依此类推,直到你只是将0和1的值进行比较。
但冒泡排序很慢。另一种易于理解的排序类型是Merge Sort。在合并排序中,您可以拆分,例如将您的100个数字分成两个50,然后对每组50个进行排序(可以通过冒泡排序或合并排序本身)。然后,使两个索引指向每个已排序的一半的开头。无论哪一个较低,将其移至输出并推进该指数。结果是一次通过数据输出所有100个已排序的数字。
合并排序可以使用值交换完全实现。或者你可以创建另一个数组并填充它,这避免了不必要地交换值的开销。
BTW与冒泡排序在100个项目上你最终比较大约100 x 100/2 = 5000比较。使用Merge Sort,合并最终列表(100个项目)需要100个比较,合并一半(2x50)也需要100个,四分之一(4x25)需要另外100个,8个(8x~12.5)需要100个,16个(16x~6.25) 100,32(32x~3.125)取100。在下面你达到截止点,分割32位将得到64位,只有1-2个元素,所以一旦它们&#冒出来对它们进行冒泡排序会更快# 39;重新调整到3-4级,再给出100分左右。
这里的规则是合并排序在O(n * log-n)时间内起作用。由于2 ^ 7 = 128,Merge Sort将在大约100 * 7 = 700比较中对100个值进行排序。