Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++]Пиpaмидальная сортировка. помогите разобрать код 
:(
    Опции темы
valfandra
Дата 31.3.2009, 06:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 31.3.2009

Репутация: нет
Всего: нет



Код

#include "iostream" 
#include "stdio.h" 
using namespace std; 

void sift( int *array, int L, int R ){ 
int i, j; 
int item; 
i = L; 
    j = 2*L; 
    item = array[L]; 
    if ( j < R && array[j] < array[j + 1] ) j++; 
      while ( j <= R && item < array[j] ){ 
          array[i] = array[j]; 
          i = j; 
          j = 2*j; 
          if ( j < R && array[j] < array[j + 1] ) j++; 
         } 
    array[i] = item; 
    } 

void heapsort( int *array, int size ){ 
int sort=0; 
int L, R; 
int item; 
    L = size/2; 
    R = size - 1; 
    while ( L > 0 ){  
          L--; 
          sift( array, L, R ); 
    } 
    while ( R > 0 ){  
          item = array[0]; 
          array[0] = array[R]; 
          array[R] = item; 
                    R--; 
          sift( array, L, R ); 
    } 
    cout<<"\nf: "<<sort; 
} 

void main(){ 
int i, size; 
int *array; 
   cout << "Kolivhestvo elementov: \n "; 
   cin >> size; 
array = new int[size]; 
cout << "Ishodnii massiv:  "<<endl; 
for ( i = 0; i < size; i ++ ){ 
array[i] = rand()%10000; 
cout << array[i] << " "; 
} 

heapsort( array, size ); 
cout << "\nSortirovannii: "; 
for ( i = 0; i < size; i ++ ){ 
cout << array[i] << " " ; 
}  
   cin.get(); 
} 


как работает сортировка-я знаю. а каод не понимаю. помогите разобрать! а еще нужно подсчитать колво перестановок и сравнений

Это сообщение отредактировал(а) Rodman - 31.3.2009, 08:44
PM MAIL   Вверх
zim22
Дата 31.3.2009, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



Цитата(valfandra @  31.3.2009,  06:11 Найти цитируемый пост)
. а каод не понимаю

мне что, опять комментарии в стихах писать...

#include "iostream"  - здесь мы подключаем заголовочный файл для юзанья классов cout, cin
... может вам MSDN почитать?


--------------------
PM MAIL   Вверх
valfandra
Дата 31.3.2009, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 31.3.2009

Репутация: нет
Всего: нет



void sift( int *array, int L, int R ){ // подключаем функцию. как я поняла для построения дерева?
i = L;
    j = 2*L;  // а это все последовательность и последовательность разбитая надва?
 item = array[L]; // заносим в item л-тый элемент массива. те хвост?

if ( j < R && array[j] < array[j + 1] ) j++; // если индекс нашей последовательности меньше р? р это хвост? вот тут уже не понимаю

while ( j <= R && item < array[j] ){
          array[i] = array[j];
          i = j;
          j = 2*j;
          if ( j < R && array[j] < array[j + 1] ) j++;
      }
    array[i] = item;
    }
// пока условия не понятны. и дальнейшие действия тоже не понятно. i=j j=2*j - это наверно родитель и потомки?

void heapsort( int *array, int size ){ // это сама сортировка уже
L = size/2;
    R = size - 1; // середина последовательности и крайний элемент справа?

while ( L > 0 ){  // пока середина больше нуля. а когда она будет меньше?
L--;
          sift( array, L, R );// Л уменьшаем и втыкаем фцнцию для построения дерева? те мы где-то уже вершину с хвостом поменяли, хвост записали в item, а принцип дерева нарушен? поэтомутут вставляем функию для дерева?

while ( R > 0 ){ 
          item = array[0];
          array[0] = array[R];
          array[R] = item;
          sort++;
          R--;
          sift( array, L, R ); // а это для чего?
PM MAIL   Вверх
zim22
Дата 31.3.2009, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



valfandra, я могу вам посоветовать реализовать сортировку самостоятельно. не такая уж она и сложная. заодно разберётесь.


--------------------
PM MAIL   Вверх
valfandra
Дата 31.3.2009, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 31.3.2009

Репутация: нет
Всего: нет



zim22, а не можете по этому коду помочь? пожалуйста smile 
PM MAIL   Вверх
valfandra
Дата 31.3.2009, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 31.3.2009

Репутация: нет
Всего: нет



помогите чсло срванений и перестановок посчиатьь
PM MAIL   Вверх
zim22
Дата 31.3.2009, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



Цитата(valfandra @  31.3.2009,  12:38 Найти цитируемый пост)
помогите чсло срванений и перестановок посчиатьь

создайте переменные-счётчики. при каждой перестановке или сравнении инкрементируйте соотв.счётчик. в конце работы функции счётчики будут содержать нужные вам значения.


--------------------
PM MAIL   Вверх
Dmi3ev
Дата 31.3.2009, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 5
Всего: 41



http://ru.wikipedia.org/wiki/%D0%9F%D0%B8%...%B2%D0%BA%D0%B0
тут уже все реализовано



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

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0499 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.