Advertisement
Alexqq11

heapsort

Apr 23rd, 2015
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.76 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void swap(int &a,int &b){
  6.     int temp = a;
  7.     a = b;
  8.     b = temp;
  9. }
  10.  
  11. void heapsort( int *array,int n){
  12.     int offset = 0;//смещение
  13.     bool flag = false; // отсортированно ли данное дерево
  14.     for(;;){
  15.         flag = false;
  16.         for (int i = 0; i < n; i++){
  17.             if ((i+1)*2 + offset < n){
  18.                 if ((array[i+offset] > array[i*2+1+offset]) || (array[i+offset] > array[(i+1)*2+offset])){ // заменяем вершину дерева на наменьшего потомка
  19.                     if ( array[i*2+1+offset] < array[(i+1)*2+offset]){
  20.                         swap( array[i+offset], array[i*2+1+offset]);
  21.                         flag = true;// значит, что при данном смещение нечего сортировать
  22.                     }
  23.                     else if ( array[(i+1)*2+offset] < array[i*2+1+offset]){
  24.                         swap( array[i+offset], array[(i+1)*2+offset]);
  25.                         flag = true;
  26.                     }
  27.                 }
  28.                 if ( array[(i+1)*2+offset] < array[i*2+1+offset]){    //обрабатываем случай, когда остается последние 2 элемента в массиве
  29.                     swap( array[i*2+1+offset], array[(i+1)*2+offset]);
  30.                     flag = true;
  31.                 }
  32.             }
  33.             else if (i*2 + 1 + offset < n){
  34.                 if (array[i+offset] > array[i*2 +1 + offset]){
  35.                     swap( array[i+offset], array[i*2+1+offset]);
  36.                     flag = true;
  37.                 }
  38.             }
  39.         }
  40.         if (!flag) // когда сортировать нечего увеличиваем смещение
  41.             offset++;
  42.         if (offset + 2 == n)
  43.             break;
  44.     }
  45. }
  46. int main(){
  47.     int  n = 10;
  48.     int a[10] = {2, 54, 6, 64, 356, 78, 5, 78, 3, 657};
  49.     for ( int i = 0; i < n; ++i ) {  cout << a[i] << " "; }
  50.     {heapsort(a, 10);}
  51.     cout<<endl;
  52.     for ( int i = 0; i < n; ++i ) cout << a[i] << " ";
  53.     return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement