Уааа, уже просто мозги кипят, не знаю что делать
Задание:
Сортировать числовой файл(целые числа) обменной сортировкой, сортировкой вставками . Оценить реальное время на сортировку каждым из методов на текущем компьютере. Количество элементов файла не менее 10000.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include "altconio.h"
//создание массива
void input (FILE *file){
srand(time(NULL));
int mas[10000], i;
file = fopen("~$temp.txt", "wt");
for (i = 0; i < 10000; i++){
mas[i]=rand()%100;
fprintf(file, "%d ", mas[i]);}
fclose(file);
delay(1000);
printf("\nМассив сформирован \n");
printf("\n");
system("pause");}
//вывод массива
void output (FILE *file){
clrscr();
printf("\n ");
printf("\n ");
printf("\n ");
printf("\n ");
clrscr();
int mas[10000], i;
file = fopen("~$temp.txt", "rt");
while (!feof(file)){
fscanf (file, "%d ", &mas[i]);
printf("%d ", mas[i]);}
fclose(file);
printf("\n");
system("pause");}
//вывод массива отсортированного методом обмена
void output_swap (FILE *file){
clrscr();
printf("\n ");
printf("\n ");
printf("\n ");
printf("\n ");
clrscr();
int mas[10000], i;
file = fopen("sort_swap.txt", "rt");
while (!feof(file)){
fscanf (file, "%d ", &mas[i]);
printf("%d ", mas[i]);}
fclose(file);
printf("\n");
system("pause");}
//вывод массива отсортированного методом вставок
void output_insert (FILE *file){
clrscr();
printf("\n ");
printf("\n ");
printf("\n ");
printf("\n ");
clrscr();
int mas[10000], i;
file = fopen("sort_insert.txt", "rt");
while (!feof(file)){
fscanf (file, "%d ", &mas[i]);
printf("%d ", mas[i]);}
fclose(file);
printf("\n");
system("pause");}
//обменная сортировка
void sort_swap(FILE *file, int *mas){
clock_t timer;
timer = clock();
int i, j, buf=0, m[10000];
file = fopen("~$temp.txt", "rt");
for (i=0; i<10000; i++){
for (j=0; j<10000; j++){
if (m[j]>m[j+1]){
buf=m[j];
m[j]=m[j+1];
m[j+1]=buf;}}}
FILE *f = fopen("sort_swap.txt", "wt");
for (i=0; i<10000; i++){
fprintf(f, " %d", m[i]);}
fclose(file);
fclose(f);
timer = clock() - timer;
printf("\nМассив отсортирован методом сортировки обмена \n");
printf("\n Время сортировки = %f сек \n", (double)timer/CLOCKS_PER_SEC);
system("pause");}
//сортировка вставками
void sort_insert(FILE *file, int *mas){
clock_t timer;
timer = clock();
int i, j, buf=0, m[10000];
file = fopen("~$temp.txt", "rt");
for (i=0; i<10000; i++){
buf = m[i];
for (j=i-1; j>=0 && m[i]>buf; j--){
m[j+1]=m[j];}
m[j+1]=buf;}
FILE *f = fopen("sort_insert.txt", "wt");
for (i=0; i<10000; i++){
fprintf(f, " %d", m[i]);
fclose(file);}
timer = clock() - timer;
printf("\nМассив отсортирован методом сортировки вставками \n");
printf("\n Время сортировки = %f сек \n", (double)timer/CLOCKS_PER_SEC);
system("pause");}
void menu_out(int a) {
clrscr();
setcolor(WHITE,BLACK);
printf("\n");
switch (a) { // в зависимости от переданного параметра по-разному показывается меню
case 1: setcolor(BLACK,WHITE); //для выбранного 1-го пункта белый текст на розовом фоне
printf("Сформировать новый массив\n");
setcolor(WHITE,BLACK); // для остальных пунктов - белый текст на черном фоне
printf("Вывод массива на экран\n");
printf("Сортировать массив методом обменной сортировки\n");
printf("Вывод массива отсортированного методом обменной сортировки\n");
printf("Сортировать массив методом сортировкой вставками\n");
printf("Вывод массива отсортированного методом сортировки вставками\n");
printf("Выход\n");
break; // то же самое для остальных пунктов, если они выбраны
case 2: printf("Сформировать новый массив\n");
setcolor(BLACK,WHITE);
printf("Вывод массива на экран\n");
setcolor(WHITE,BLACK);
printf("Сортировать массив методом обменной сортировки\n");
printf("Вывод массива отсортированного методом обменной сортировки\n");
printf("Сортировать массив методом сортировкой вставками\n");
printf("Вывод массива отсортированного методом сортировки вставками\n");
printf("Выход\n");
break;
case 3: printf("Сформировать новый массив\n");
printf("Вывод массива на экран\n");
setcolor(BLACK,WHITE);
printf("Сортировать массив методом обменной сортировки\n");
setcolor(WHITE,BLACK);
printf("Вывод массива отсортированного методом обменной сортировки\n");
printf("Сортировать массив методом сортировкой вставками\n");
printf("Вывод массива отсортированного методом сортировки вставками\n");
printf("Выход\n");
break;
case 4: printf("Сформировать новый массив\n");
printf("Вывод массива на экран\n");
printf("Сортировать массив методом обменной сортировки\n");
setcolor(BLACK,WHITE);
printf("Вывод массива отсортированного методом обменной сортировки\n");
setcolor(WHITE,BLACK);
printf("Сортировать массив методом сортировкой вставками\n");
printf("Вывод массива отсортированного методом сортировки вставками\n");
printf("Выход\n");
break;
case 5: printf("Сформировать новый массив\n");
printf("Вывод массива на экран\n");
printf("Сортировать массив методом обменной сортировки\n");
printf("Вывод массива отсортированного методом обменной сортировки\n");
setcolor(BLACK,WHITE);
printf("Сортировать массив методом сортировкой вставками\n");
setcolor(WHITE,BLACK);
printf("Вывод массива отсортированного методом сортировки вставками\n");
printf("Выход\n");
break;
case 6: printf("Сформировать новый массив\n");
printf("Вывод массива на экран\n");
printf("Сортировать массив методом обменной сортировки\n");
printf("Вывод массива отсортированного методом обменной сортировки\n");
printf("Сортировать массив методом сортировкой вставками\n");
setcolor(BLACK,WHITE);
printf("Вывод массива отсортированного методом сортировки вставками\n");
setcolor(WHITE,BLACK);
printf("Выход\n");
break;
case 7: printf("Сформировать новый массив\n");
printf("Вывод массива на экран\n");
printf("Сортировать массив методом обменной сортировки\n");
printf("Вывод массива отсортированного методом обменной сортировки\n");
printf("Сортировать массив методом сортировкой вставками\n");
printf("Вывод массива отсортированного методом сортировки вставками\n");
setcolor(BLACK,WHITE);
printf("Выход\n");
setcolor(WHITE,BLACK);
break;}}
int main(){
srand(time(NULL));
clock_t timer;
int a, vibor = 1, N = 7;
clrscr();
printf("\n\n");
int mas[10000];
FILE *file = fopen("~$temp.txt", "wt");
if (f == NULL) {
perror("\nCan't open file: ");
getch();
return 1;}
while (a != 27){ //пока не нажата ESC, если ESC, то программа закончится
menu_out(vibor);
a = getch();// узнаем код клавиши
if (a == 224) a = getch(); // если нажата служебная клавиша, то еще раз getch()
switch (a){
case 13:// если Enter
switch (vibor){
case 1: clrscr(); input(file); clrscr(); break;
case 2: clrscr(); output(file); clrscr(); break;
case 3: clrscr(); sort_swap(file, mas); clrscr(); break;
case 4: clrscr(); output_swap(file); clrscr(); break;
case 5: clrscr(); sort_insert(file, mas); clrscr(); break;
case 6: clrscr(); output_insert(file); clrscr(); break;
case 7: a = 27; break;}
break;
case 80:// если ВНИЗ, то vibor либо увеличивается, либо становится равным 1
if ( vibor < N ) vibor++;
else vibor = 1;
break;
case 72:// если ВВЕРХ, то vibor либо уменьшается, либо становится равным N, т.е.7
if (vibor > 1) vibor--;
else vibor = N;
break;}}
printf("\n");
system("pause");
return 0;
}
После обменной сортировки, в файл записывается мусор, не пойму откуда он берется... а сортировка вставками и вовсе походу не работает.
Подскажите, где что не правильно?