25 / 25 / 0
Регистрация: 21.11.2009
Сообщений: 159
1

Реализация алгоритма сортировки для любых типов данных

08.12.2009, 22:49. Показов 12565. Ответов 38
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста переделать реализацию сортировки так, чтобы она могла работать с любыми типами данных(int, double, etc) Т.е. могла сортировать не только целые числа, но и строки, etc.. Начал делать через функцию обратного вызова и застрял..

вот header:

sort.h
typedef int (*cmp_fnx)(void*, void*)

void sort(void *v, int c, int s, cmp_fnx);
//указатель на массив, количество элементов, на размерность каждого элемента

Сам алгоритм:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Sort1(int c[], int max)
// c[] - наш массив
// max - размер массива c
{
for (int i1 = 0; i1 < max; i1++)
{
for (int i = max-2; i >= i1; i--)
{
if (c[i+1] > c[i]) continue;
 
Change(c, i, i+1); // Двигаем минимальное число вверх, тем самым сортируя числа
}
}
}
Нужно реализовать функцию, которую мы объявляем в хедере, и чтобы она могла работать с любыми типами данных...данных int, double, etc... т.е. была универсальной. Вот как-то так...мэйби кто нибудь подскажет ?)) Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2009, 22:49
Ответы с готовыми решениями:

Реализовать три любых алгоритма сортировки матрицы на выбор
Всем привет форумчане, сижу и ломаю голову над заданной задачей. А точнее как ее реализовать т.к в...

Реализация алгоритма сортировки Шелла
Здравствуйте! Помогите пожалуйста с реализацией алгоритма сортировки Шелла. Вот дан простой...

Реализация алгоритма сортировки массива
Добрый день !!! Помогите пожалуйста с реализацией алгоритма сортировки массива. Нашел код, но не...

Реализация алгоритма сортировки слиянием
Имеется массив строк вида char lent где каждая строка уже отсортирована по возрастанию. Нужно...

38
25 / 25 / 0
Регистрация: 21.11.2009
Сообщений: 159
21.12.2009, 17:37  [ТС] 21
Author24 — интернет-сервис помощи студентам
зачем генерировать 2 массива ? мне не нужно демонстрировать как сортируются любые типы данных, эта функция должна быть в библиотеке(какбэ задание-то в этом и заключается), а так программа генерит массив, сортирует его, сравнивает время сортировки с quicksort, и выводит на экран, потом спрашивает - ввести ли отсортированный массив ? y/n - выводит/не выводит -> выход из программы, по этой претензий ко мне не было.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
21.12.2009, 18:03 22
Цитата Сообщение от Shim Посмотреть сообщение
зачем генерировать 2 массива ?
Можешь вводить массив с клавиатуры, если не впадлу. По мне проще иметь в программе несколько массивов, запустить программу и по печати сразу глазами видеть, правильно работает программа, или нет. Если тебе больше нравится каждый раз вводить массив с клавиатуры - ради бога.

Я пытаюсь тебе по шагам объяснить, как правильно написать программу (чтобы ты сам понял)
0
25 / 25 / 0
Регистрация: 21.11.2009
Сообщений: 159
21.12.2009, 21:53  [ТС] 23
Цитата Сообщение от Evg Посмотреть сообщение
Можешь вводить массив с клавиатуры, если не впадлу. По мне проще иметь в программе несколько массивов, запустить программу и по печати сразу глазами видеть, правильно работает программа, или нет. Если тебе больше нравится каждый раз вводить массив с клавиатуры - ради бога.

Я пытаюсь тебе по шагам объяснить, как правильно написать программу (чтобы ты сам понял)
вообще-то у меня массив генерируется рандомно, например 2000 элементов, но для наглядности можно меньше сделать.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
21.12.2009, 22:48 24
Короче. Напиши рабочий вариант программы и выложи его ЦЕЛИКОМ на форум. Чтобы я хотя бы видел, что ты там уже наваял и как двигаться дальше.
0
25 / 25 / 0
Регистрация: 21.11.2009
Сообщений: 159
22.12.2009, 19:03  [ТС] 25
mergesort.h
C++
1
2
3
4
5
6
typedef int (*cmp_fnx)(void*, void*);
 
void mergesort(void *v, int c, int s, cmp_fnx); //указатель на массив, 
                                                              //количество элементов в массиве,
                                                              //размер каждого элемента в байтах, 
                                                             //указатель на функцию

mergesort.сpp

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
#include "mergesort.h"
inline void Change(int a[], int first, int second)
// меняем местами элементы буфера first на second
// a[] - наш массив
// first и second - номера элементов массива a, которые надо поменять местами!
{
    if (first == second) // Если одинаковые номера элементов, то не нужно менять их местами
        return;
    int i;
 
    i = a[second];
    a[second] = a[first];
    a[first] = i;
 
/*
// Можно еще так вот, но так медленнее:
    a[first] += a[second]; // Здесь,
    a[second] = a[first] - a[second]; // здесь,
    a[first] = a[first] - a[second]; // и здесь мы меняем местами два числа в буфере
*/
}
void mergesort(void *v, int c, int s, cmp_fnx cmp);
{
//вот тут планируется реализовать ф-ю для сорт. любых данных
}
main.cpp
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include "mergesort.h"
 
inline void Change(int a[], int first, int second)
// меняем местами элементы буфера first на second
// a[] - наш массив
// first и second - номера элементов массива a, которые надо поменять местами!
{
    if (first == second) // Если одинаковые номера элементов, то не нужно менять их местами
        return;
    int i;
 
    i = a[second];
    a[second] = a[first];
    a[first] = i;
 
/*
// Можно еще так вот, но так медленнее:
    a[first] += a[second]; // Здесь,
    a[second] = a[first] - a[second]; // здесь,
    a[first] = a[first] - a[second]; // и здесь мы меняем местами два числа в буфере
*/
}
 
int FindMax(int a[], int max)
// Поиск максимального числа в массиве от a[0] до a[max]
// a[] - наш массив
// max - размер массива a
{
    int imax = 0;
 
    for (int i = 0; i <= max; i++)
    {
        if (a[imax] < a[i])
            imax = i;
    }
 
    return imax;
}
 
void Sort(int b[], int max)
// Сортировка номер один!
// b[] - наш массив
// max - размер массива b
{
    int i1;
    for (int i = max - 1; i > 0; i--)
    {
        i1 = FindMax(b, i); // Находим самое максимальное число в промежутке от a[0] до a[i]
 
        Change(b, i, i1); // ставим максимальное число в конец (а именно на место элемента под номером i)
    }
}
 
void Sort1(int c[], int max)
// Сортировка номер два!
// c[] - наш массив
// max - размер массива c
{
    for (int i1 = 0; i1 < max; i1++)
    {
        for (int i = max-2; i >= i1; i--)
        {            
            if (c[i+1] > c[i]) continue;
 
            Change(c, i, i+1); // Двигаем минимальное число вверх, тем самым сортируя числа
        
        }
    }
}
 
void main()
{
    #define MAX 3000
    int a[MAX], b[MAX], c[MAX]; // Объявляем пару буферов
 
/*
// Если записать строки выше, тогда у юзера будет запрашиваться 
// число элементов в массиве
 
    int MAX;
    printf("Enter the size of array with the numbers: ");
    scanf("%i", &MAX);
 
    int *a = new int[MAX]; // Объявляем буфер
    int *b = new int[MAX]; // Объявляем буфер
    int *c = new int[MAX]; // Объявляем буфер
*/
 
    srand((unsigned)time(0));
    int i;
    for (int i = 0; i < MAX; i++)
    {
        a[i] = rand(); // заполняем случайными числами
        b[i] = a[i]; // делаем копию
        c[i] = a[i]; // делаем копию
    }
 
    clock_t begin, end;
    begin = clock();
    Sort(b, MAX); // 
    end = clock();
 
    float f = (float)(end-begin); // Измеряем время, занятое сортировкой
 
    printf ("Sorting %i elements with the sort1 takes     %.0f msec.\r\n\r\n", MAX, f);
 
    begin = clock();
    Sort1(c, MAX); // 
    end = clock();
    float f1 = (float)(end-begin); // Измеряем время, занятое сортировкой
 
 
    printf ("Sorting %i elements with the sort2 takes  %.0f msec.\r\n", MAX, f1);
 
    // Вы хотите просмотреть отсортированные данные?
    printf("\r\n\r\n\r\nDo you want to view the sorting result? (y/n)"); 
    short Key = 0;
 
    while (Key = _getch()) // Ожидание нажатия на кнопку
    {
        if (Key == 'n' || Key == 'N' || Key == 'N') // если нажата кнопк N или Esc, то
            return; // выход
        else if (Key == 'y' || Key == 'Y') // если y, то
            break; // то продолжаем
    }
 
    printf("\r\n\r\n\r\n");
    printf(" N.    unsorted        N.     q sort       N.    merge sort\r\n");
    printf("\r\n");
    for (i = 0; i < MAX; i++)
        printf("%3i.    %5i        %3i.    %5i        %3i.    %5i\r\n", 
        i+1, a[i], i+1, b[i], i+1, c[i]); // Печать содержимого массивов
    printf("\r\nPress any key to continue\r\n");
 
    Key = 0;
 
    while (!Key) Key = _getch(); // Ожидание нажатия на кнопку
}
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
22.12.2009, 19:31 26
Запустил программу, она мне в ответ пишет
Sorting 3000 elements with the sort1 takes 10000 msec.
Ты можешь по этой надписи оценить правильность работы? Я - нет

Я выкинул к чёртовой матери весь твой main и написал свой. Без красоты в виде времени сортировки, случайно сгенерённых массивов, вопросов и прочего. Ты можешь проверять на своём, но я предпочитаю на своём

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    const int MAX = 10;
    int a[MAX] = { 1, 7, 8, 34, 2, 5, 0, 6, 9, 3 };
    int i;
 
    Sort (a, MAX);
    for (int i = 0; i < MAX; i++)
      printf ("%d ", a[i]);
    printf ("\n");
 
    return 0;
}
Результат такой:

Код
0 1 2 3 5 6 7 8 9 34
Т.е. оно по крайне мере работает

--------------------------------------------------------

Шаг N2:
Поменяй функцию Change. Сечай ты передаёшь указатель на начало массива и индексы. Перепиши так, чтобы подавались просто указатели на два элемента массива (т.е. чтобы обмен местами работал обсьрагированно от массива и был универсальным с точностью до типа переменной)

Шаг N3:
Сравнение двух элементов вместо операции "<" или ">" делай через функцию сравнения, которую пока просто напиши рядом и пусть она принимает указатели на два int'а
0
25 / 25 / 0
Регистрация: 21.11.2009
Сообщений: 159
22.12.2009, 20:01  [ТС] 27
Цитата Сообщение от Evg Посмотреть сообщение
Запустил программу, она мне в ответ пишет
Sorting 3000 elements with the sort1 takes 10000 msec.
Ты можешь по этой надписи оценить правильность работы? Я - нет

Я выкинул к чёртовой матери весь твой main и написал свой. Без красоты в виде времени сортировки, случайно сгенерённых массивов, вопросов и прочего. Ты можешь проверять на своём, но я предпочитаю на своём

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    const int MAX = 10;
    int a[MAX] = { 1, 7, 8, 34, 2, 5, 0, 6, 9, 3 };
    int i;
 
    Sort (a, MAX);
    for (int i = 0; i < MAX; i++)
      printf ("%d ", a[i]);
    printf ("\n");
 
    return 0;
}
Результат такой:

Код
0 1 2 3 5 6 7 8 9 34
Т.е. оно по крайне мере работает

--------------------------------------------------------

Шаг N2:
Поменяй функцию Change. Сечай ты передаёшь указатель на начало массива и индексы. Перепиши так, чтобы подавались просто указатели на два элемента массива (т.е. чтобы обмен местами работал обсьрагированно от массива и был универсальным с точностью до типа переменной)

Шаг N3:
Сравнение двух элементов вместо операции "<" или ">" делай через функцию сравнения, которую пока просто напиши рядом и пусть она принимает указатели на два int'а
выкинь mergesort.сpp нафиг, он недоделан, поэтому такую ерунду выдает. Твой код у меня тож ошибку выдает - Ошибка error C3861: Sort: идентификатор не найден
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
22.12.2009, 20:08 28
> выкинь mergesort.сpp нафиг, он недоделан, поэтому такую ерунду выдает.

main у тебя в файле main.cpp. И как связано "выкинь mergesort" с тем, что я писал выше - непонятно. Какие ты мне дал исходники, те я и компилял
0
25 / 25 / 0
Регистрация: 21.11.2009
Сообщений: 159
22.12.2009, 20:12  [ТС] 29
Цитата Сообщение от Evg Посмотреть сообщение
> выкинь mergesort.сpp нафиг, он недоделан, поэтому такую ерунду выдает.

main у тебя в файле main.cpp. И как связано "выкинь mergesort" с тем, что я писал выше - непонятно. Какие ты мне дал исходники, те я и компилял
в MS Visual Studio C++ компилил ?
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
22.12.2009, 21:56 30
Компилил gcc'ями, правда не пойму, какая от этого разница?
0
25 / 25 / 0
Регистрация: 21.11.2009
Сообщений: 159
22.12.2009, 22:03  [ТС] 31
Цитата Сообщение от Evg Посмотреть сообщение
Компилил gcc'ями, правда не пойму, какая от этого разница?
я не знаю, ибо не разбираюсь особенно, попробуй только main скомпилить, у меня он чётко работает))
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
22.12.2009, 22:18 32
Я и не говорю, что твой main не работает. Твой main печатает только то, что я уже написал выше. По этой печати невозможно понять, работает оно или нет. В моём варианте main'а стоит конкретная печать конкретного массива и я, глядя глазами на массив, забитый в процедуре main и глядя на печать, которая рожается в процессе работы программы, вижу, что программа работает правильно хотя бы для такого массива. Это подаёт надежду на то, что программа будет работать правильно для любого массива (собственно, поэтому я и предложил написать несколько массивов)

Теперь выполни шаги 2 и 3 из поста #26. Таки образом постепенно мы доберёмся до того, что тебе нужно. Для начала для простоты работай только с одним файлом (main.cpp), как сделаешь нужные исправления - выложи их на форум, будем двигаться дальше
0
25 / 25 / 0
Регистрация: 21.11.2009
Сообщений: 159
22.12.2009, 22:37  [ТС] 33
Цитата Сообщение от Evg Посмотреть сообщение
Теперь выполни шаги 2 и 3 из поста #26. Таки образом постепенно мы доберёмся до того, что тебе нужно. Для начала для простоты работай только с одним файлом (main.cpp), как сделаешь нужные исправления - выложи их на форум, будем двигаться дальше
мне очень стыдно, но я не знаю как сделать(( мэйби по шагам объяснишь, и я понемногу буду учиться, мне сдавать в конце недели, теперь жалею что не собрался и не сел делать раньше...
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
22.12.2009, 23:44 34
Цитата Сообщение от Shim Посмотреть сообщение
мне очень стыдно, но я не знаю как сделать(( мэйби по шагам объяснишь, и я понемногу буду учиться, мне сдавать в конце недели, теперь жалею что не собрался и не сел делать раньше...
Писать готовый вариант вроде бы порешили, что не стОит. Читать лекции по Си мне как-то не хочется. Я для того и просил тебя выложить текст программы, чтобы по шагам её приводить в нужный вид. Что должны делать следующие два шага, я написал. Либо изучай книгу по Си, либо придётся давать готовое решение
1
25 / 25 / 0
Регистрация: 21.11.2009
Сообщений: 159
23.12.2009, 08:06  [ТС] 35
Цитата Сообщение от Evg Посмотреть сообщение
Писать готовый вариант вроде бы порешили, что не стОит. Читать лекции по Си мне как-то не хочется. Я для того и просил тебя выложить текст программы, чтобы по шагам её приводить в нужный вид. Что должны делать следующие два шага, я написал. Либо изучай книгу по Си, либо придётся давать готовое решение
может попробовать, а ? вкратце следующие 2 шага объяснить, попробую понять, а то изучать книгу как-то поздновато что ли...
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
23.12.2009, 14:47 36
> вкратце следующие 2 шага объяснить

Я и так уже написал яснее некуда. Читать лекции по Си я точно не буду
0
25 / 25 / 0
Регистрация: 21.11.2009
Сообщений: 159
23.12.2009, 15:46  [ТС] 37
Цитата Сообщение от Evg Посмотреть сообщение
> вкратце следующие 2 шага объяснить

Я и так уже написал яснее некуда. Читать лекции по Си я точно не буду
чорт...разбираться времени уже нету; тогда надежда только на готовое решение, буду очень благодарен.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
23.12.2009, 17:43 38
Надо завязывать с добрыми делами

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
#include <stdio.h>
 
/* --------- Это библиотека ---------- */
 
void
swap_mem (void *p1, void *p2, int elem_size)
{
  char *pp1 = (char*) p1;
  char *pp2 = (char*) p2;
  char tmp;
  int i;
 
  for (i = 0; i < elem_size; i++)
    {
      tmp = pp1[i];
      pp1[i] = pp2[i];
      pp2[i] = tmp;
    }
}
 
void
sort (void *arr, int num_elems, int elem_size, int (*cmp_func) (void*, void*))
{
  int i, j;
  void *pi, *pj;
 
  for (i = 0; i < (num_elems - 1); i++)
    for (j = i + 1; j < num_elems; j++)
      {
        /* Указатели на элементы массива arr[i] и arr[j] */
        pi = (char*)arr + i * elem_size;
        pj = (char*)arr + j * elem_size;
 
        /* Если элемент arr[i] > arr[j], то меняем их местами */
        if (cmp_func (pi, pj) > 0)
          swap_mem (pi, pj, elem_size);
      }
}
 
/* --------- Это пользовательские коды ---------- */
 
int
cmp_int (void *p1, void *p2)
{
  int *pp1 = (int*) p1;
  int *pp2 = (int*) p2;
 
  if (*pp1 < *pp2)
    return -1;
  else if (*pp1 == *pp2)
    return 0;
  else
    return 1;
}
 
int
cmp_double (void *p1, void *p2)
{
  double *pp1 = (double*) p1;
  double *pp2 = (double*) p2;
 
  if (*pp1 < *pp2)
    return -1;
  else if (*pp1 == *pp2)
    return 0;
  else
    return 1;
}
 
int
main (void)
{
#define MAX_a 10
  int a[MAX_a] = { 1, 7, 8, 34, 2, 5, 0, 6, 9, 3 };
#define MAX_b 12
  double b[MAX_b] = { 1.0, 7.0, 8.0, 34.0, 2.0, 5.0, 0.0, 6.0, 9.0, 3.0, 12.0, 17.0 };
  int i;
 
  sort (a, MAX_a, sizeof (a[0]), cmp_int);
  for (i = 0; i < MAX_a; i++)
    printf ("%d ", a[i]);
  printf ("\n");
 
  sort (b, MAX_b, sizeof (b[0]), cmp_double);
  for (i = 0; i < MAX_b; i++)
    printf ("%f ", b[i]);
  printf ("\n");
 
  return 0;
}
1
25 / 25 / 0
Регистрация: 21.11.2009
Сообщений: 159
23.12.2009, 19:28  [ТС] 39
Цитата Сообщение от Evg Посмотреть сообщение
Надо завязывать с добрыми делами

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
#include <stdio.h>
 
/* --------- Это библиотека ---------- */
 
void
swap_mem (void *p1, void *p2, int elem_size)
{
  char *pp1 = (char*) p1;
  char *pp2 = (char*) p2;
  char tmp;
  int i;
 
  for (i = 0; i < elem_size; i++)
    {
      tmp = pp1[i];
      pp1[i] = pp2[i];
      pp2[i] = tmp;
    }
}
 
void
sort (void *arr, int num_elems, int elem_size, int (*cmp_func) (void*, void*))
{
  int i, j;
  void *pi, *pj;
 
  for (i = 0; i < (num_elems - 1); i++)
    for (j = i + 1; j < num_elems; j++)
      {
        /* Указатели на элементы массива arr[i] и arr[j] */
        pi = (char*)arr + i * elem_size;
        pj = (char*)arr + j * elem_size;
 
        /* Если элемент arr[i] > arr[j], то меняем их местами */
        if (cmp_func (pi, pj) > 0)
          swap_mem (pi, pj, elem_size);
      }
}
 
/* --------- Это пользовательские коды ---------- */
 
int
cmp_int (void *p1, void *p2)
{
  int *pp1 = (int*) p1;
  int *pp2 = (int*) p2;
 
  if (*pp1 < *pp2)
    return -1;
  else if (*pp1 == *pp2)
    return 0;
  else
    return 1;
}
 
int
cmp_double (void *p1, void *p2)
{
  double *pp1 = (double*) p1;
  double *pp2 = (double*) p2;
 
  if (*pp1 < *pp2)
    return -1;
  else if (*pp1 == *pp2)
    return 0;
  else
    return 1;
}
 
int
main (void)
{
#define MAX_a 10
  int a[MAX_a] = { 1, 7, 8, 34, 2, 5, 0, 6, 9, 3 };
#define MAX_b 12
  double b[MAX_b] = { 1.0, 7.0, 8.0, 34.0, 2.0, 5.0, 0.0, 6.0, 9.0, 3.0, 12.0, 17.0 };
  int i;
 
  sort (a, MAX_a, sizeof (a[0]), cmp_int);
  for (i = 0; i < MAX_a; i++)
    printf ("%d ", a[i]);
  printf ("\n");
 
  sort (b, MAX_b, sizeof (b[0]), cmp_double);
  for (i = 0; i < MAX_b; i++)
    printf ("%f ", b[i]);
  printf ("\n");
 
  return 0;
}
большое спасибо

p.s.: если у меня появится желание учиться программированию (ааа, сейчас, размечтался ) то на каких примерах/заданиях лучше начать тренироваться ?
0
23.12.2009, 19:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2009, 19:28
Помогаю со студенческими работами здесь

Реализация алгоритма сортировки пирамидой
Все привет! Нужна помощь в реализации алгоритма пирамидальной сортировки используя ДВУСВЯЗНУЮ...

Реализация алгоритма сортировки слиянием
помогите, пожалуйста, с реализацией алгоритма сортировки слиянием на VBA.

Реализация алгоритма сортировки вставками
Мне нужно сделать лабу тема вверху... перед этим прочитал тему ...

Реализация алгоритма пузырьковой сортировки
Задача на массивы, где нужно банки переливать (ну, у меня она с этим ассоциируется). Раньше решал...


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

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru