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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
_д_м_и_т_р_и_й_
0 / 0 / 0
Регистрация: 11.02.2011
Сообщений: 35
#1

подпрограмма для универсальной сортировки - C++

22.08.2011, 22:08. Просмотров 779. Ответов 3
Метки нет (Все метки)

извините за то, что опять прошу помощи.
нужно разработать алгоритм и описать подпрограмму для универсальной сортировки произвольного массива с произвольным базовым типом. Подпрограмме передается массив как нетипизованный параметр, его длина, размер элемента и логическая функция сравнения двух элементов массива.

Я был бы очень признателен, если бы эта программа была написана на Си, потому что в С++ я ничего не смыслю. Заранее, всем откликнувшимся огромное спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2011, 22:08     подпрограмма для универсальной сортировки
Посмотрите здесь:

Использование универсальной инициализации для объектов своего класса - C++
Здравствуйте! Все мы знаем, что поля структуры мы можем красиво инициализировать через {...}. Тогда мы std::vector структур можем...

Написать шаблонную функцию для универсальной отрисовки данных, содержащихся в объектах, засунутых в вектор - C++
Существует базовый класс и два класса наследника от него. Хочу сделать функцию для универсальной отрисовки данных содержащихся в объектах,...

Подпрограмма для нахождения максимального элемента массива - C++
пишу простую подпрограмку по нахождению максимального элемента а она почему то не работает(( ind=S; p=0; for (i=1;i<ele;i++) ...

Подпрограмма для обнаружения корней квадратного тричлена - C++
Доброго дня, нужно написать подпрограмму для обнаружения корней квадратного тричлена. #include <math.h> #include <iostream.h> void...

Сделать функцию универсальной - C++
Добрый вечер, форумчане. Работаю с набором фигур выгруженных из файла. Каждую фигуру надо отрисовать в окне OpenGL. При этом заранее...

Два счетчика для обмена и сравнений для сортировки массива - C++
написал два счетчика для обмена и сравнений для сортировки массива.Проблема при выводе выводится сначала кучу чисел сортировки и обмена,а...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nameless
Эксперт C++
334 / 298 / 14
Регистрация: 16.06.2009
Сообщений: 486
22.08.2011, 23:39     подпрограмма для универсальной сортировки #2
_д_м_и_т_р_и_й_,

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
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <functional>
 
template <class Iterator>
void DownHeap(Iterator first, int current, int size) {
   std::size_t index_child;
   auto element = *(first + current);
 
   while(current <= size / 2) {
      index_child = 2 * current;
 
      if ((index_child < size) && (*(first + index_child) < *(first + index_child + 1))) {
         index_child++;
      }
      
      if (element >= *(first + index_child)) { 
         break;
      }
 
      *(first + current) = *(first + index_child);
      current = index_child;
   }
   *(first + current) =  element;
}
 
template <class Iterator>
void SortByHeap(Iterator first, Iterator last) {
   std::size_t size = last - first;
 
   for (int i = size / 2 - 1; i >= 0; --i) {
      DownHeap(first, i, size - 1);
   }
 
   for (int i = size - 1; i > 0; --i) {
      std::swap(*(first + i), *first);
      DownHeap(first, 0, i - 1);
   }
}
 
int main() {
   std::vector <int> v_nums = { 2, 0, -4, 7, -5, 8, 10, 15, -6 };
 
   SortByHeap(v_nums.begin(), v_nums.end());
   
   std::for_each(v_nums.begin(), v_nums.end(), [](int number) {
      std::cout << number << std::endl;
   } );
 
   return 0;
}
Пирамидальная сортировочка.. Удачи
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
23.08.2011, 03:21     подпрограмма для универсальной сортировки #3
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
#include <stdio.h>
#include <stddef.h>
#include <string.h>
 
//----------------
 
int cmp_int(const void* a, const void* b)
{
    return *(int*)a - *(int*)b;
}
 
//----------------
 
int cmp_str(const void* a, const void* b)
{
    return strcmp(*(char**)a, *(char**)b);
}
 
//----------------
void swap(void* first, void* second, size_t size)
{
    char t;
    char* a = (char*)first;
    char* b = (char*)second;
 
    do
    {
        t = *a;
        *a++ = *b;
        *b++ = t;
    } while(--size);
}
 
//----------------
void bubble_sort(void* arr, size_t n, size_t size, int (*cmp)(const void* a, const void* b))
{
    size_t i, j;
    char* p;
 
    for(i = 0; i < n; ++i)
    {
        for(j = n-1; j > i; --j)
        {
            p = (char*)arr + j * size;
            if(cmp(p, p - size) < 0)
                swap(p, p - size, size);
        }
    }
}
 
//----------------
 
#define N 5
 
int main()
{
    int i;
    int d[N] = {3,2,5,4,1};
    char* s[N] = {"adf", "dpkjw", "blkjd", "cvklj", "ecjq"};
 
    bubble_sort(d, N, sizeof(int), cmp_int);
    for(i = 0; i < N; ++i)
        printf("%d ", d[i]);
    putchar('\n');
 
    bubble_sort(s, N, sizeof(char*), cmp_str);
    for(i = 0; i < N; ++i)
        printf("%s ", s[i]);
    putchar('\n');
 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2011, 03:21     подпрограмма для универсальной сортировки
Еще ссылки по теме:

Программа для сортировки - C++
Здраствуйте, необходимо написать программу в которуй будет 12 случайных элементов, затем нужно будет сложить рядом стоящие элементы, и...

Критерий сортировки для set - C++
Проблема в понимании этого оператора в main() IntSet c2(reverseOrder); Вообще не могу понять что это такое. Кто объяснит? ...

Функции для сортировки массивов - C++
Написать функцию, которая упорядочивает по возрастанию все строки двумерного массива, которые неупорядочены по убыванию и как ее вызывать в...

Алгоритм сортировки для вектора - C++
Ребята у меня есть структура типа: struct Set { int row; //строка в матрице int value; //значение, которое повторяется int...

Написать программу для сортировки - C++
Дан целочисленный массив, состоящий из N элементов. Число N и элементы массива вводятся с клавиатуры. 1. Написать программу для...

разработать программу для сортировки массивов - C++
1. создать две матрицы 3х3 и организовать их добавления 2. создать две матрицы 2х3 и 3х2 и организовать их умножения 3. создать матрицу...


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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт CЭксперт С++
9465 / 5478 / 927
Регистрация: 25.07.2009
Сообщений: 10,500
23.08.2011, 03:21     подпрограмма для универсальной сортировки #4
Быструю сортировку лениво делать - много букв
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
105
106
107
// ANSI C 99
 
#include <stdio.h>
#include <string.h>
 
#define swap(a, b, size) ({ unsigned char tmp[(size)]; memcpy(tmp, (a), (size)); memcpy((a), (b), (size)); memcpy((b), tmp, (size)); })
 
void mysort(void * arr, size_t count, size_t size, int (*func)(const void *, const void *)){
    void * pArr, * pCurrent, * pFirst;
    
    for ( pArr = arr; pArr < ( arr + (count - 1) * size ); pArr += size ){
        pFirst = pArr;
        for ( pCurrent = pArr + size; pCurrent < ( arr + count * size ); pCurrent += size )
            if ( func(pFirst, pCurrent) > 0 )
                pFirst = pCurrent;
        if ( pFirst != pArr )
            swap(pArr, pFirst, size);
    }
}
 
int cmp_char_ascendant(const void * a, const void * b){
    return *(char*)a - *(char*)b;
}
 
int cmp_char_descendant(const void * a, const void * b){
    return cmp_char_ascendant(b, a);
}
 
int cmp_int_ascendant(const void * a, const void * b){
    return *(int*)a - *(int*)b;
}
 
int cmp_int_descendant(const void * a, const void * b){
    return cmp_int_ascendant(b, a);
}
 
int cmp_double_ascendant(const void * a, const void * b){
    double diff = *(double*)a - *(double*)b;
    return ( diff < 0.0 ) ? -1 : ( diff > 0.0 ) ? 1 : 0;
}
 
int cmp_double_descendant(const void * a, const void * b){
    return cmp_double_ascendant(b, a);
}
 
#define SIZE 5
 
int main(void){
    char cArr[SIZE] = { 'b', 'd', 'a', 'c', 'e' };
    int iArr[SIZE] = { 3, 1, 2, 5, 4 };
    double dArr[SIZE] = { 2.0, 3.1, 4.4, 1.8, 5.4 };
    
    int i;
    
    printf("Char unsorted:\n");
    for ( i = 0; i < SIZE; ++i )
        printf("%c ", cArr[i]);
    printf("\n");
    
    mysort(cArr, SIZE, sizeof(char), cmp_char_ascendant);
    printf("Char sorted ascendant:\n");
    for ( i = 0; i < SIZE; ++i )
        printf("%c ", cArr[i]);
    printf("\n");
    
    mysort(cArr, SIZE, sizeof(char), cmp_char_descendant);
    printf("Char sorted descendant:\n");
    for ( i = 0; i < SIZE; ++i )
        printf("%c ", cArr[i]);
    printf("\n");
    
    printf("Int unsorted:\n");
    for ( i = 0; i < SIZE; ++i )
        printf("%d ", iArr[i]);
    printf("\n");
    
    mysort(iArr, SIZE, sizeof(int), cmp_int_ascendant);
    printf("Int sorted ascendant:\n");
    for ( i = 0; i < SIZE; ++i )
        printf("%d ", iArr[i]);
    printf("\n");
    
    mysort(iArr, SIZE, sizeof(int), cmp_int_descendant);
    printf("Int sorted descendant:\n");
    for ( i = 0; i < SIZE; ++i )
        printf("%d ", iArr[i]);
    printf("\n");
    
    printf("Double unsorted:\n");
    for ( i = 0; i < SIZE; ++i )
        printf("%.1f ", dArr[i]);
    printf("\n");
    
    mysort(dArr, SIZE, sizeof(double), cmp_double_ascendant);
    printf("Double sorted ascendant:\n");
    for ( i = 0; i < SIZE; ++i )
        printf("%.1f ", dArr[i]);
    printf("\n");
    
    mysort(dArr, SIZE, sizeof(double), cmp_double_descendant);
    printf("Double sorted descendant:\n");
    for ( i = 0; i < SIZE; ++i )
        printf("%.1f ", dArr[i]);
    printf("\n");
    
    return 0;
}
Yandex
Объявления
23.08.2011, 03:21     подпрограмма для универсальной сортировки
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru