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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2014, 00:44   #1
g[]Iz
 
Регистрация: 28.04.2014
Сообщений: 3
По умолчанию Сортировка от Хоара к Шеллу

Код:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int n;
int shell(int *arr, int n);
int hoar(int *arr, int left, int right);
int main()
{
    int  i;
    srand(time(0));
    int left=0, right=n-1;
    int *arr;
    printf("Input n = ");
    scanf("%d", &n);
    arr=(int*)calloc(n, sizeof(int));
    for(i=0; i<n; i++)
        {
            arr[i]=rand()%100;
            printf("%d ", arr[i]);
        }
        puts("\n");
        hoar(arr, left, right);
        for(i=0; i<n; i++)
        {
            printf("%d ", arr[i]);
        }
}

int hoar(int *arr, int left, int right)//быстрая сортировка
{
    int i, j, buf, k=0, sh=0;
    i=left;
    j=right;
    while(i!=j)
    {
        if(arr[i]>arr[j])
        {
            if(abs((arr[i]-arr[j]))<10)
                {
                    shell(arr, n);
                return 0;
               }
            buf=arr[i];
            arr[i]=arr[j];
            arr[j]=buf;
            k++;

        }
        if((k%2)==0)
        {
            j--;
        }
        else
        {
            i++;
        }
    }
    if(left<i)
    {
        hoar(arr, left, i-1);
    }
    if(right>j)
    {
        hoar(arr, j+1, right);
    }
}
int shell(int *arr, int n)
{
     int h,i,buf;
     printf("\n\n\n\nPERED SHELL");
     for(i=0; i<n; i++)
        {
            printf("%d ", arr[i]);
        }
        printf("\n\n\n\n");
     for(h=1;(h*2+1)<n;h=h*2+1);
     for(;h>0;h=(h-1)/2)
     {
                        for(i=0;i<n-h;i++)
                        {
                                          if(arr[i]>arr[i+h])
                                          {
                                                            buf=arr[i];
                                                            arr[i]=arr[i+h];
                                                            arr[i+h]=buf;
                                                            i=i-2*h;
                                                            if(i<-1)
                                                            i=-1;
                                          }
                        }
     }
}
Реализовать и протестировать функцию qsortplus(int *arr, int n); , которая сортирует массив по возрастанию методом Хоара. При этом *arr массив, n - количество элементов в массиве. Для коротких интервалов (менее 10 чисел) дальнейшую рекурсию не осуществлять, а перейти на метод Шелла.
Как перейти с Хоара к Шеллу, что бы Хоар, заканчивался сразу после вызова Шелла?
g[]Iz вне форума Ответить с цитированием
Старый 15.05.2014, 01:48   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
int hoar(int *arr, int left, int right)//быстрая сортировка
{
    int c = right - left + 1;
    if (c < 10) {
        shell(arr + left, c);
        return 0;
    }
    int i, j, buf, k=0, sh=0;
    i=left;
    j=right;
    ...
Думаю, примерно так (не проверял).
Не забудьте "обернуть" вызов Хоара в отдельную функцию (как сказано в задании).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрая сортировка(Хоара) Karl__ Помощь студентам 16 14.12.2013 10:07
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
Сортировка двумерного массива по столбцам методом быстрой сортировки( Хоара) и пирамидальной. tworc22 Помощь студентам 3 28.10.2011 23:05
Сортировка Хоара(для объектов класса) m9yt Общие вопросы C/C++ 0 02.06.2010 18:45
сортировка массива Методом Хоара (быстрой сортировкой) wild-weight Паскаль, Turbo Pascal, PascalABC.NET 3 26.09.2009 16:46