Форум программистов, компьютерный форум CyberForum.ru

Сортировка Shell сорт - C++

Восстановить пароль Регистрация
 
YoungProgrammer
4 / 4 / 1
Регистрация: 18.01.2011
Сообщений: 206
16.12.2012, 13:52     Сортировка Shell сорт #1
Нашел в интернете лучший набор для сортировки до 4000 элементов.
1, 4, 10, 23, 57, 132, 301, 701, 1750
начиная, конечно, с конца, мы доходим до единицы и получается сортируем BubbleSort-ом в итоге что ли?
у меня вот такой код получился:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#pragma hdrstop
 
#include <Stdio.h>
#include <Assert.h>
#include "sumsorting.h"
 
void printArray(int Array[1000], int Count)
{
    for (int i = 0; i < Count; i++)
    {
        printf("%d ", Array[i]);
    }
}
 
void SortArray(int miniArray[1000], int Count)
{
    int i = 0;
    int temp;
    char Sorted = 'N';
    while (Sorted == 'N')
    {
        Sorted = 'Y';
        for (i = 0; i < Count - 1; i++)
        {
            if (miniArray[i] > miniArray[i + 1])
            {
                temp = miniArray[i];
                miniArray[i] = miniArray[i + 1];
                miniArray[i + 1] = temp;
                Sorted = 'N';
            }
        }
    }
}
 
void shellSort(int mainArray[], int numberOfElements, int increment)
{
       int miniArray[1000];
       int j = 0;
       int tempJ;
       int i = 0;
       while (j <= increment)
       {
           tempJ = j;
           i = 0;
           do
           {
               miniArray[i] = mainArray[tempJ];
               tempJ += increment;
               i++;
           }
           while (tempJ < numberOfElements);
           SortArray(miniArray, i);
           for (i; i >= 0; i--)
           {
               mainArray[tempJ] = miniArray[i];
               tempJ -= increment;
           }
           j++;
 
       }
}
 
void sumsorting(int(*GetArrayElement)(unsigned int), int arraySize)
{
        int i;
        int sum1 = 0;
        int sum2 = 0;
        int num1;
        int num2;
        int numArrayTemp;
        int GetArray[1000];
        int SequenceIncrement[] = {1, 4, 10, 23, 57, 132, 301, 701, 1750};
        int ChosenIncrement = 0;
        int NumOfChosenIncrement = 0;
        char Sorted = 'N';
        assert(GetArrayElement);
        assert(arraySize > 0);
        for (i = 0; i < arraySize; i++)
        {
                 GetArray[i] = GetArrayElement(i);
        }
        for (i = 0; i < 8; i++)
        {
            if (arraySize >= SequenceIncrement[i])
            {
                ChosenIncrement = SequenceIncrement[i];
                NumOfChosenIncrement = i;
            }
        }
        for (i = NumOfChosenIncrement; i >= 0; i--)
        {
            shellSort(GetArray, arraySize, SequenceIncrement[i]);
        }
        printf("result:\n");
        for (i = 0; i != arraySize; i++)
        {
                printf("%d\n",GetArray[i]);
        }
}
 
//---------------------------------------------------------------------------
 
#pragma package(smart_init)
Добавлено через 7 минут
1, 4, 10, 23, 57, 132, 301, 701, 1750 - это значения промежутков для сравнения элементов.
подробнее здесь http://ru.wikipedia.org/wiki/%D0%A1%...BB%D0%BB%D0%B0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2012, 13:52     Сортировка Shell сорт
Посмотрите здесь:

реализация Shell Sort в stl C++
C++ Программировани Shell для Windows (замена Windows Explorer)
C++ Что можно сделать при помощи Shell Extensions?
Классы с наследованием. Описать класс fruit, содержащий поля сорт, размер, описание C++
C++ задача сорт и поиск бульбашка
C++ Составить программу, в которой описывается структура из полей: Товар, Цена, Сорт
Как можно считать динамическую переменную и выполнить shell code? C++
Сортировки (ошибка в Shell) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 19:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru