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

Отсортировать массив по убыванию через алгоритм пирамидальной сортировки - C++

Восстановить пароль Регистрация
 
RavilSHai
0 / 0 / 0
Регистрация: 26.10.2012
Сообщений: 82
29.05.2014, 22:46     Отсортировать массив по убыванию через алгоритм пирамидальной сортировки #1
В общем мне дан вещественный массив, нужно его отсортировать по убыванию через алгоритм пирамидальной сортировки
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
#include <stdio.h>
#include <stdlib.h>
 
 
void siftDown(int *numbers, int root, int bottom)
{
  int done, maxChild, temp;
  done = 0;
  while ((root*2 <= bottom) && (!done))
  {
    if (root*2 == bottom)
      maxChild = root * 2;
    else if (numbers[root * 2] > numbers[root * 2 + 1])
      maxChild = root * 2;
    else
      maxChild = root * 2 + 1;
    if (numbers[root] < numbers[maxChild])
    {
      temp = numbers[root];
      numbers[root] = numbers[maxChild];
      numbers[maxChild] = temp;
      root = maxChild;
    }
    else
      done = 1;
  }
}
void heapSort(int *numbers, int array_size)
{
  int i, temp;
  for (i = (array_size / 2)-1; i >= 0; i--)
    siftDown(numbers, i, array_size);
  for (i = array_size-1; i >= 1; i--)
  {
    temp = numbers[0];
    numbers[0] = numbers[i];
    numbers[i] = temp;
    siftDown(numbers, 0, i-1);
  }
}
void main()
{
    float a[10];
    for(int i=0;i<10;i++)
        a[i]=rand()%20-10;
    for(int i=0;i<10;i++)
        printf("%f ",a[i]);
    printf("\n");
    heapSort(a,10);
    for(int i=0;i<10;i++)
        printf("%f ",a[i]);
    printf("\n");
    getchar();
}
Ругается в основном тут
C
1
heapSort(a,10);
49 строка
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2014, 22:46     Отсортировать массив по убыванию через алгоритм пирамидальной сортировки
Посмотрите здесь:

Отсортировать массив по возрастанию и убыванию C++
C++ Отсортировать массив по убыванию сортировкой вставкой.
Создать одномерный массив, заполнить его случайными значениями, отсортировать массив по убыванию C++
C++ создать и отсортировать двумерный массив по строкам используя алгоритм сортировки вставкой
Отсортировать массив по убыванию, затем добавить недостающий элемент и отсортировать массив по возрастанию C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.05.2014, 22:48     Отсортировать массив по убыванию через алгоритм пирамидальной сортировки #2
Цитата Сообщение от RavilSHai Посмотреть сообщение
Не получается исправить ошибку
Какую?
RavilSHai
0 / 0 / 0
Регистрация: 26.10.2012
Сообщений: 82
29.05.2014, 23:46  [ТС]     Отсортировать массив по убыванию через алгоритм пирамидальной сортировки #3
1 IntelliSense: аргумент типа "float *" несовместим с параметром типа "int * 49
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.05.2014, 23:54     Отсортировать массив по убыванию через алгоритм пирамидальной сортировки #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
И что здесь непонятно?
C++
1
void heapSort(int *numbers, int array_size)
Первый параметр указатель на int, при вызове передаёте указатель на float:
C++
1
2
3
    float a[10];
    ...
    heapSort(a,10);
RavilSHai
0 / 0 / 0
Регистрация: 26.10.2012
Сообщений: 82
31.05.2014, 16:07  [ТС]     Отсортировать массив по убыванию через алгоритм пирамидальной сортировки #5
Вроде у меня получилось, на всякий случай скину, может кому-нибудь пригодится
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
#include <stdio.h>
#include <stdlib.h>
 
 
void siftDown(float *numbers, int root, int bottom)
{
  int done, maxChild, temp;
  done = 0;
  while ((root*2 <= bottom) && (!done))
  {
    if (root*2 == bottom)
      maxChild = root * 2;
    else if (numbers[root * 2] > numbers[root * 2 + 1])
      maxChild = root * 2;
    else
      maxChild = root * 2 + 1;
    if (numbers[root] < numbers[maxChild])
    {
      temp = numbers[root];
      numbers[root] = numbers[maxChild];
      numbers[maxChild] = temp;
      root = maxChild;
    }
    else
      done = 1;
  }
}
void heapSort(float *numbers, float array_size)
{
  int i, temp;
  for (i = (array_size / 2)-1; i >= 0; i--)
    siftDown(numbers, i, array_size);
  for (i = array_size-1; i >= 1; i--)
  {
    temp = numbers[0];
    numbers[0] = numbers[i];
    numbers[i] = temp;
    siftDown(numbers, 0, i-1);
  }
}
void main()
{
    float a[10];
    for(int i=0;i<10;i++)
        a[i]=(rand()%901+100)/double(100);
    for(int i=0;i<10;i++)
        printf("%.3f ",a[i]);
    printf("\n");
    heapSort(a,10);
    for(int i=0;i<10;i++)
        printf("%.3f ",a[i]);
    printf("\n");
    getchar();
}
Yandex
Объявления
31.05.2014, 16:07     Отсортировать массив по убыванию через алгоритм пирамидальной сортировки
Ответ Создать тему
Опции темы

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