2 месяца назад
Пирамидальная сортировка, пример на Си.
Пирамидальная сортировка. Два потомка у узла. /***  Пирамидальная сортировка  Пирамида - 2 потомка у узла имеют  значение меньше чем у него. Таким  образом, гарантированно можно извлечь  наибольший элемент, затем пирамиду надо  перебалансировать. Время - O(N*log2 N) ***/ #include <stdio.h> #include <stdlib.h> #include <time.h> #define LEFT(i)  ((i<<1)+1)  //i*2 + 1 #define RIGHT(i) ((i<<1)+2) #define SWAP(v,a,b)  {int tmp=v[a];v[a]=v[b];v[b]=tmp;} void heapify(int v[], int i, int N){  while(1){  ...
06:44
1,0×
00:00/06:44
484 тыс смотрели · 4 года назад
1 месяц назад
Пирамидальная сортировка.
Каждый узел имеет 2 (или более) потомка. Значение в потомках меньше, чем в вершине. Таким образом, на вершине дерева мы имеем наибольший узел. Все дерево или пирамида располагаются в одномерном массиве. Координаты легко вычисляются. #include <stdio.h> #include <stdlib.h> #include <time.h> #define LEFT(i)  ((i<<1)+1)  //i*2 + 1 #define RIGHT(i) ((i<<1)+2) #define SWAP(v,a,b)  {int tmp=v[a];v[a]=v[b];v[b]=tmp;} void heapify(int v[], int i, int N){  while(1){   int left=LEFT(i), right=RIGHT(i), largest=i;   if(left<N && v[left]>v[i]) largest=left;   if(right<N && v[right]>v[largest])largest=right;  ...