Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
RavilSHai
0 / 0 / 4
Регистрация: 26.10.2012
Сообщений: 82
1

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

29.05.2014, 22:46. Просмотров 1090. Ответов 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
#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 строка
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2014, 22:46
Ответы с готовыми решениями:

Отсортировать массив с помощью бинарной пирамидальной сортировки
Отсортируйте одномерный массив с помощью алгоритма бинарной пирамидальной сортировки.С++

Заполнить массив случайными числами и отсортировать его методом быстрой сортировки по убыванию
Написать программу на с++ которая заполняет массив случайными числами и сортирует их методом...

создать и отсортировать двумерный массив по строкам используя алгоритм сортировки вставкой
создать и отсортировать двумерный массив по строкам используя алгоритм сортировки вставкой

Отсортировать одномерный массив по возрастанию пирамидальной сортировкой
Пожалуйста, помогите найти ошибку. Нужно отсортировать одномерный массив по возрастанию...

Отсортировать массив по убыванию, затем добавить недостающий элемент и отсортировать массив по возрастанию
2) В массиве a ...a встречаются по одному разу все целые числа от 0 до n, кроме одного. За n...

4
alsav22
5450 / 4845 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.05.2014, 22:48 2
Цитата Сообщение от RavilSHai Посмотреть сообщение
Не получается исправить ошибку
Какую?
0
RavilSHai
0 / 0 / 4
Регистрация: 26.10.2012
Сообщений: 82
29.05.2014, 23:46  [ТС] 3
1 IntelliSense: аргумент типа "float *" несовместим с параметром типа "int * 49
0
alsav22
5450 / 4845 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.05.2014, 23:54 4
Лучший ответ Сообщение было отмечено RavilSHai как решение

Решение

И что здесь непонятно?
C++
1
void heapSort(int *numbers, int array_size)
Первый параметр указатель на int, при вызове передаёте указатель на float:
C++
1
2
3
    float a[10];
    ...
    heapSort(a,10);
1
RavilSHai
0 / 0 / 4
Регистрация: 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();
}
0
31.05.2014, 16:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2014, 16:07

Алгоритм быстрой сортировки по убыванию
Я нашёл алгоритм быстрой сортировки по возрастанию: int n, a; //n - количество элементов void...

Создать одномерный массив, заполнить его случайными значениями, отсортировать массив по убыванию
создать одномерный массив, заполнить его случайными значениями, отсортировать массив по убыванию....

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


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

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

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