Код: Выделить всё
#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();
}
помогите разобраться с кодом? принцип, как работает я знаю
вот мои догадки
void sift - функция по выстраиванию дерева
void heapsort - сама сортировка
L = size/2; - последовательность делим попалам
R = size - 1; - последние элементы последовательности справа. типа хвост?
while ( L > 0 ) а оно когда будет меньше нуля?
все что дальше пошло ничего не понимаю !!!((((