Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program CountingSort;
- {$APPTYPE CONSOLE}
- uses
- SysUtils, Windows;
- var
- inputFile, outputFile: TextFile;
- size, max, i, j, k: Integer;
- arr, counter: array of Integer;
- result: string;
- begin
- SetConsoleCP(1251); //установка русского языка
- SetConsoleOutputCP(1251);
- try
- if (FileExists('input.txt')) then
- begin
- AssignFile(inputFile, 'input.txt'); //имя читаемого файла
- Reset(inputFile);
- Readln(inputFile, size); //длина массива
- SetLength(arr, size); //установка длины массива
- for i:= 0 to (size - 1) do
- begin
- Read(inputFile, arr[i]); //чтение массива
- Write(arr[i], ' '); //и его вывод на экран
- end;
- CloseFile(inputFile); //закрытие файла
- //чтобы знать длину массива счетчиков нужно узнать,
- //какой элемент в данном массиве максимальный
- max := arr[0];
- for i:= 0 to (size - 1) do
- begin
- if (arr[i] > max) then
- begin
- max := arr[i];
- end;
- end;
- SetLength(counter, max + 1);
- for i:= 0 to (size - 1) do
- begin //подсчет количества чисел в счетчике
- inc(counter[arr[i]]);
- end;
- //сортировка
- j:= 0;
- k:= 0;
- for i:= 0 to (size - 1) do
- begin
- if (k >= counter[j]) then
- begin
- inc(j);
- while (counter[j] = 0) do
- begin
- inc(j);
- end;
- k:= 0;
- end;
- arr[i]:= j;
- inc(k);
- end;
- //сохранение отсортированного массива в виде строки
- for i:= 0 to (size - 1) do
- begin
- result:= result + IntToStr(arr[i]) + ' ';
- end;
- Writeln;
- Writeln(result); //вывод строки
- if (FileExists('output.txt')) then
- begin
- AssignFile(outputFile, 'output.txt'); //имя читаемого файла
- Rewrite(outputFile);
- Write(outputFile, result); //чтение в файл
- CloseFile(outputFile); //закрытие файла
- end
- else Writeln('Файла "output.txt" не существует'); //проверка на существование записываемого файла
- end
- else Writeln('Файла "input.txt" не существует'); //проверка на существование читаемого файла
- except
- on err: EInOutError do
- Write('Ошибка при чтении массива из файла'); //ошибка при чтении
- else Write('Ошибка'); //при непредусмотренных ошибках
- end;
- Readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment