Он работает с меньшим размером массива, так что вот некоторые комментарии (так как это было в CodeReview) и некоторые исправления для больших размеров массива.
1, если вы хотите использовать массивы фиксированного размера, используйте константу вместо200000
(или 20000000
) литералы.
2, Использование динамических массивов лучше.Выделите память после того, как вы прочитали первую строку и используйте прочитанный размер в качестве размера нового массива.Кроме того, я бы сохранял размер файла данных (первая строка файла) в отдельной переменной, а не в массиве.
int dataSize;
inputFile >> dataSize;
double *twentyMMNumbers = new double[dataSize];
Он выделяет точный объем памяти.Не больше, не меньше.
Также исправляет ошибку Ошибка сегментации .Для получения дополнительной информации проверьте этот вопрос: Ошибка сегментации на больших размерах массива
(Не забудьте выделить массив с помощью delete[]
.)
3, это не нужночитать весь файл, если у вас больше записей, чем размер массива.Я бы изменил цикл while:
while (inputFile) {
if (count >= dataSize) {
break;
}
inputFile >> twentyMMNumbers[count];
count++;
}
inputFile.close();
Может быть, exit(-1)
и сообщение об ошибке было бы лучше вместо break
.
4, следующий комментарий не является обязательным:
//While loop
5, Вы должны передать реальный размер массива в функцию insertionSort
, поэтому напишите это:
insertionSort(twentyMMNumbers, dataSize);
Комментарий здесь также не нужен.
6, Улучшение обработки ошибок: что произойдет, если значение dataSize
больше, чем число чисел в файле?
7, я бы извлек функцию printArray
с последним for
, а также функция readInput
.
8, рассмотрите возможность использования печати в стиле C ++ вместо printf
s:
cout << "Hello world!" << endl;
(требуется #include <iostream>
.)