Поменять тип сортировки с пузырька на шелла/ вставки - 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;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы
  2. Определяем функцию сортировки Шелла с указанием типа данных и параметров
  3. Инициализируем переменные: v, j, i, h, m = n / 9
  4. Задаем цикл для установки значений h, который будет использоваться в сортировке
  5. Задаем внутренний цикл для каждой итерации внешнего цикла, где i = h, j = i, v = a[i]
  6. Пока j >= h и a[j-h] > v выполняем следующие действия: a[j] = a[j-h], j -= h
  7. После выполнения цикла a[j] = v
  8. Задаем цикл для установки значений h, который будет использоваться в сортировке
  9. Внутренний цикл для каждой итерации внешнего цикла, где i = h, j = i, v = a[i]
  10. Пока j >= h и a[j-h] > v выполняем следующие действия: a[j] = a[j-h], j -= h
  11. После выполнения цикла a[j] = v
  12. В основной функции определяем массив a и переменную n для его размера
  13. Вызываем функцию сортировки Шелла с передачей массива a и его размера
  14. Выводим отсортированный массив на экран
  15. Завершаем программу

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы