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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Определить, содержит ли массив серии из подряд стоящих простых чисел http://www.cyberforum.ru/cpp-beginners/thread733643.html
Задан массив из целых чисел.Определить содержит ли массив серии из подряд стоящих простых чисел.Если да,то посчитать кол-во таких серий.Удалить из массива все двузначные числа.Определить, изменилось ли кол-во серий. В программе написать функции:вычисления кол-во серий из подряд стоящих простых элементов,удаление элемента. Матрицу я сформировал,но как составить алгоритм вычисления этих серий и...
C++ Считать информацию с файла и вывести на экран используя "Очередь" Помогите исправить ошибку. Нужно считать информацию с файла и вывести на экран используя "Очередь". #include<fstream.h> #include<iostream.h> #include<stdio.h> struct record {char name; int otdel; http://www.cyberforum.ru/cpp-beginners/thread733632.html
Найти в каждом столбце матрицы минимальный и максимальный элементы C++
решите пожалуйста 2 задачи(с блок-схемами) bond101, обращаю ваше внимание на правила форума: 1) один вопрос - одна тема 2) текстовые задания набирайте от руки поэтому сейчас ваши задания от руки и разместите каждое в отдельной теме не забудьте дать темам более осмысленные и конкретные названия, чем "задачи"
Анимация движения (найти ошибку) C++
#include <stdlib.h> #include <iostream.h> #include <graphics.h> // подключение графической библиотеки #define A 120 class graph // объявление пользовательского класа для работы с графикой { public: graph();// конструктор
C++ Определите среднее значение элементов массива Х(20). Найдите индекс элемента массива, наиболее близкого к среднему значению http://www.cyberforum.ru/cpp-beginners/thread733616.html
Определите среднее значение элементов массива Х(20). Найдите индекс элемента массива, наиболее близкого к среднему значению.
C++ Создание функции зануления элементов главной диагонали Необходимо создать функцию зануления элементов по главной диагонали массива n*n. #include <iostream> using namespace std; void main() { setlocale(LC_ALL, "Russian"); int n,i,j; printf("Ведите кол-во вершин графа :"); scanf("%i", &n); подробнее

Показать сообщение отдельно
YoungProgrammer
4 / 4 / 1
Регистрация: 18.01.2011
Сообщений: 206
16.12.2012, 13:52     Сортировка Shell сорт
Нашел в интернете лучший набор для сортировки до 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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru