Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 18.10.2015, 22:48   #1
Misha199615
 
Регистрация: 15.10.2014
Сообщений: 3
Репутация: 10
По умолчанию Сортировка Шелла

Заменить сортировку на шаг Седжвика
Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(int argc, char *argv[])
{
  // файл создается в текущей директории
    system("chcp 1251"); // смена кодировки консоли
    FILE *file; // Описание указателя на файл
    file = fopen("Data.txt","w"); // создание файла с именем Data.txt для записи
    // имя файла произвольное
    if (!file) {printf("Ошибка создания файла"); // проверка ошибки при открытии файла
                system("PAUSE");
                return 0;}
    while (1) { // Организуем бесконечный цикл            
    printf("Введите n:");
    int n;
    scanf("%d",&n);
    int *x = (int*)malloc(sizeof(int)*n);
    fprintf(file,"Размерность: %d",n); // Печать размерности в файл
    float compare=0, shift=0;
    int temp,flag;
    // Печать исходного массива
    int i,j;
    srand (time(NULL));
    for(i=0;i<n;i++) 
      { x[i] = rand()%20 - rand()%15;
        printf("%4d",x[i]);
             }
    //Сортировка 
    int step=n;
    while (step > 0)
    {
      for (int i = 0; i < (n - step); i++)
      
                {
                    int j = i;
                    
                    while (j >= 0 && x[j] > x[j + step])
                    {
                        int temp = x[j];
                        x[j] = x[j + step];
                        x[j + step] = temp;shift+=3;
                        j--; compare++;
                    }
                    
                    
                }
                if (n>500)
                   step = (step-1)/3;
                else
                    step = (step-1)/2;
            }    
    
    printf("\nОтсортированный массив: ");           
     for(i=0;i<n;i++) 
      printf("%4d",x[i]);      
    fprintf(file, "\nКоличество сравнений : %.0f \n", compare); // Печать в файл    
    fprintf(file, "Количество перестановок: %.0f \n",shift); //  
    free( x);
    // Выполнить сортировку другого массива?
    printf("\nВыполнить сортировку другого массива? (1 - да, 0 - нет)");
    scanf("%d",&temp);
    if (!temp) break; // если введен 0, то выход из бесконечного цикла
     }
    fclose(file);    // закрытие файла    
    printf("\n");        
    system("PAUSE");
    return 0; 
}
Misha199615 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ Сортировка Шелла? Никита Лось Помощь студентам 1 06.10.2013 16:25
Сортировка Шелла и Шейкер-сортировка AleksandrMakarov Паскаль 11 11.03.2012 12:18
Сортировка Шелла adidas Паскаль 0 13.12.2011 15:20
сортировка Шелла pilot76 Помощь студентам 2 17.08.2009 18:05


17:24.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru