Сортировка массивов и запись в файл

233
08 сентября 2018, 12:10

помогите разобраться с сортировкой и выводом всего этого в файл по возрастанию, пробовал реализовывать через динамические массивы, но так и не вышло..

Программа должна записывать значения из cin >> number в number.txt и сортировать их по возрастанию.

Мой код:

#include <iostream>
#include <fstream>
using namespace std;
int main () 
{
    setlocale(0, "");
    int number;
    int *p_darr = new int[100000];
    ofstream fp("number.txt"); 
    do {
        cout << "Программа запишет целые числа в текстовый документ\n";
        cout << "Для выхода из программы вместо числа напишите 0\n";
        cout << "Введите целое число: ";
        cin >> number;
        fp << number;
        for (int i = 0; i < number; i++) {
            p_darr[i] = i;
        }
        if(cin.good()) 
        { 
            cin.ignore(10, '\n');       
        } 
    } 
    while (number != 0);
        fp.close();
        delete [] p_darr;
        cout << "\033[1;31mКоманда для завершения работы принята.\033[0m\n";
        cout << "\033[1;31mРезультат записан в number.txt.\033[0m\n";
}
Answer 1

Сортировать файл нельзя, сначала надо отсортировать массив, а затем уже записывать отсортированный в фай. Простейшая сортировка - пузырьком: тут

Функция сортировки:

void BubbleSort(int *arr, int N){
   for (int i = 0; i < N; i++)
      for (int j = i + 1; j < N; j++)
         if (arr[j] < arr[i]){
             int tmp = arr[i];
             arr[i] = arr[j];
             arr[j] = tmp;
          }
       }
}

Вызываете как:

BubbleSort(p_darr, number);

Где number - размер массива. Так же у вас массив заполняется просто числами от 0 до number. Если хотите считать данные из консоли то не p_darr[i] = i;, а cin >> p_darr;. После сортировки просто выводите в файл как

for(int i = 0; i < number; ++i){
   fp << p_darr[i] << ' ';
}

И так как массив динамический, а размер вводите из консоли, то нет смысла выделять такой большой объём памяти, после считывания cin >> number; выделите массив размером p_darr = new int[number];.

#include <iostream>
#include <fstream>
using namespace std;
void BubbleSort(int *arr, int N){
   for (int i = 0; i < N; i++)
      for (int j = i + 1; j < N; j++){
         if (arr[j] < arr[i]){
             int tmp = arr[i];
             arr[i] = arr[j];
             arr[j] = tmp;
          }
       }
}
int main () 
{
    setlocale(0, "");
    int number;
    int *p_darr;
    ofstream fp("number.txt"); 
    cout << "Программа запишет целые числа в текстовый документ\n";
    cout << "Для выхода из программы вместо числа напишите 0\n";
    cout << "Введите целое число: ";
    cin >> number;
    p_darr = new int[number];
    for (int i = 0; i < number; i++) {
        cin >> p_darr[i];
    }
    BubbleSort(p_darr, number);   
    for(int i = 0; i < number; ++i){
       fp << p_darr[i] << ' ';
    }
    fp.close();
    delete [] p_darr;
    cout << "\033[1;31mКоманда для завершения работы принята.\033[0m\n";
    cout << "\033[1;31mРезультат записан в number.txt.\033[0m\n";
}
READ ALSO
3d график в Qt5?

3d график в Qt5?

Как строить графики с помощью Qt5? Qwt3D не обновлялся с 2007 года и вроде для Qt4Находил решение от частных лиц

175
Как привязать QGridLayout к размеру окна?

Как привязать QGridLayout к размеру окна?

Цель: при изменении размера окна, изменялся размер QGridLayout

189
Blur в LinearLayout Background

Blur в LinearLayout Background

В интернете множество библиотек связанных с Blur эффектами, но почему-то я не нашел библиотек и даже способов сделать Blur в LinearLayout Background

182
Не могу ввести сначала число, потом строку

Не могу ввести сначала число, потом строку

Код программы еще не закончен, но это часть заключается в переводе строки в массивВ строке вводим числа через пробел

163