Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

Заменить сортировку на шаг Седжвика
Код:
#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 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



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