Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

sem7_1

.c
Скачиваний:
0
Добавлен:
29.05.2019
Размер:
1.6 Кб
Скачать
#include <stdio.h>
#include <stdlib.h>
#define SWAP(type, a, b) {type tmp = a; a = b; b=tmp;}

void shell_sort(int* arr, int len)
{
 for(int step = len/2; step >= 1; step /= 2)//каждый раз уменьшаем шаг в 2 раза
 {
  for(int i = step; i < len; ++i)//начинаем с положения равного длине шага
  {
   int temp = arr[i];//записываем в перем. темп текущий элемент
   int j;//положение в массиве
   for(j = i; j >= step; j -= step)//идем влево с шагом step
   {
    if(temp < arr[j - step])//если эл-т слева больше изначального
     arr[j] = arr[j - step];
    else//если эл-т слева меньше изначального то заканчиваем и(*) потом записываем изначальный в текущий эл-т 
     break;
   }
   arr[j] = temp;//то, что описано в (*)
  }
 }
}

int main()
{
 int* arr;//массив
 int N;//кол-во эл-тов
 scanf("%d", &N);//считываем кол-во эл-тов
 arr = (int*)malloc(sizeof(int) * N);//выделяем память опд н эл-тов

 for(int i = 0; i != N; ++i)//записываем в массив случайные значения
 {
  arr[i] = rand() % 1000000;
  printf("%d ", arr[i]);
 }
 putchar('\n');
 shell_sort(arr, N);//сортируем массив
 for(int q = 0; q != N; ++q)//выводим на экран отсортированный массив
  printf("%d ", arr[q]);
 putchar('\n');
 return 0;
}
Соседние файлы в предмете Информатика