Поменять тип сортировки с пузырька на шелла/ вставки - C (СИ)
Формулировка задачи:
Есть прога, которая соритрует массив из файла методом пузырька. Надо поменять тип сортировки на Шелла или вставки. Какие варианты?
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <conio.h> int main(void) { int j,i,n,q; int *x=NULL; FILE *f=NULL; f=fopen("C:/c/output.txt","r"); if(!f) { printf("Cannot open\n"); return -2; } if(fscanf(f,"%d",&n)!=1) { printf("Cannot read\n"); return -1; } printf("n=%d\n\n",n); x=(int *)malloc(n*sizeof(int)); for(i=1;i<=n;i++) { if(fscanf(f,"%d",&x[i])!=1) { printf("Kol-vo elementov ne ravno n!\n"); return 1; } } for(i=1;i<=n;i++) printf("x[%d]=%d\n",i,x[i]); printf("\n"); for(i=1;i<=n;i++) for(j=1;j<=n-1;j++) if(x[j]>x[j+1]) { q=x[j]; x[j]=x[j+1]; x[j+1]=q; } for(i=1;i<=n;i++) { printf("x[%d]=%d\n",i,x[i]); } getch(); return 0; }
Решение задачи: «Поменять тип сортировки с пузырька на шелла/ вставки»
textual
Листинг программы
#include <stdio.h> //сортировка Шелла void shell_sort(int* a, int n){ int v, j, i, h, m = n / 9; for(h = 1; h <= m; h = 1 + 3*h) ; for(; h > 0; h /= 3){ for(i = h; i < n; ++i){ j = i; v = a[i]; while((j >= h) && (a[j - h] > v)){ a[j] = a[j - h]; j -= h; } a[j] = v; } } } int main(void){ int i; int a[] = { 8, 9, 7, 1, 2, 4, 3, 6, 5, 0 }; int n = sizeof(a)/sizeof(a[0]); shell_sort(a, n); for(i = 0; i < n; ++i) printf("%d ", a[i]); getchar(); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем функцию сортировки Шелла с указанием типа данных и параметров
- Инициализируем переменные: v, j, i, h, m = n / 9
- Задаем цикл для установки значений h, который будет использоваться в сортировке
- Задаем внутренний цикл для каждой итерации внешнего цикла, где i = h, j = i, v = a[i]
- Пока j >= h и a[j-h] > v выполняем следующие действия: a[j] = a[j-h], j -= h
- После выполнения цикла a[j] = v
- Задаем цикл для установки значений h, который будет использоваться в сортировке
- Внутренний цикл для каждой итерации внешнего цикла, где i = h, j = i, v = a[i]
- Пока j >= h и a[j-h] > v выполняем следующие действия: a[j] = a[j-h], j -= h
- После выполнения цикла a[j] = v
- В основной функции определяем массив a и переменную n для его размера
- Вызываем функцию сортировки Шелла с передачей массива a и его размера
- Выводим отсортированный массив на экран
- Завершаем программу
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д