x in array)//перебір у змінну х всіх значень масиву array, в який записується результат сортування обраним методом.Text +=x +;// Додавання цих значень
} void selectSort (int [] array)//сортування вибіркою
{min;// Оголошуємо min (int i=0; i lt; array.Length; i ++)//перебираємо елементи
{= i;// Присвоюємо найменший елемент i-ому
for (int j=i + 1; j lt; array.Length; j ++)
if (array [j] lt; array [min])//якщо елменент масиву менше мінімального=j;// Присвоюємо нове мінімальне значення елементу масиву
//swap-функція. Міняємо місцями значеніяtemp=array [i];
array [i]=array [min]; [min]=temp;
}
} void heapSort (int [] array)//сортування пірамідою
{i, temp;// Оголошуємо змінні (i=array.Length/2 - 1; i gt;=0; i--)//елементи з номерами починаючи з array.Length/2 - 1 це листя, то потрібно переупорядкувати піддерева з корінням в індексах (array, i, array.Length - 1);// Викликається функція downHeap і їй передаються аргументи
for (i=array.Length - 1; i gt; 0; i -)
{= array [i]; [i]=array [0]; [0]=temp; (array, 0, i - 1);// В функцію передаються аргументи з кроком - 1
}
} void downHeap (int [] array, int k, int n)//функція нижньої сортування
{
//оголошуємо переменниеnew_elem;
int child; _elem=array [k];
while (k lt;=n/2)//поки у array [k] є діти виконуємо
{= 2 * k;
//вибираємо більшого сина (child lt; n amp; amp; array [child] lt; array [child + 1]) ++; (new_elem gt;=array [child]) break;
//інакше [k]=array [child];// Переносимо сина наверх=child;
} [k]=new_elem;
}
//принцип формування чисел Леонардо L (N)=L (N - 1) + L (N - 2) + 1 [] LeoNum={1, 1, 3, 5, 9, 15 , 25, 41, 67, 109, 177, 287, 465, 753, 1219, 1973, 3 193, 5167, 8 361, 13 529, двадцять один тисяча вісімсот дев'яносто одна, 35421, 57313, 92735, 150049, 242785, 392835, 635621, 1028457, 1664079, 2692537 , 4356617, 7049155, 11405773, 18454929, 29860703, 48315633, 78176337, 126491971, 204668309, 331160281, 535828591, 866988873, 1402817465};// Числа леонардоcurState;// Змінна curState - це поточний стан послідовності куп, двійкове подання якої задає розмірності цих куп.
//Двійкове подання числа curState є описом
//поточного стану масиву куп.
//Двійкове подання: 10110
//Числа Леонардо 95311
//Тобто перші 9 елементів - це перша купу, другі 3 - друга купа,
//і останній - це третя купа
//Після виконання функції число curState описуватиме масив куп після додавання
//одного елемента в кінець. Його двійкове подання буде 11000=24.
//Результат: Номер біта, відповідний вершині останньої купи, якщо та складається більш,
//ніж з одного елементаint NextState (ref int curState)//Функція NextState, робить зворотну операцію, але при цьому вона ще повертає номер біта, відповідний вершині останньої купи, якщо та складається більш ніж з одного елемента. Інакше функція повертає - 1.
{posNewTop=- 1;// Позиція вершини об'єднаних куп.
//виняток ((curState amp; 7) == 5)
{// curState=0101 +=3;// CurState=1000=3;
}//намагаємося знайти два поспіль одиничних біта
{next=curState; pos=0; (next!=0 amp; amp; (next amp; 3)!=3)
{ gt; gt;=1; ++;
} ((next amp; 3) == 3)//curState=01100
{+=1 lt; lt; pos;// CurState=10000=pos + 2;
} if ((curState amp; 1)!=0)//curState=x001 |=2;// CurState=x011//curState=xx00 |=1;// CurState=xx01
} posNewTop;
} void PrevState (ref int curState)//Функція PrevState змінює поточний стан з урахуванням того, що вершина останньої купи виключена з розгляду.
{((curState amp; 15) == 8)
{// curState=1000-=3;// CurState=+0101
} if ((curState amp; 1)!=0)
{((curState amp; 3) == 3)//curState=x011 ^=2;// CurState=x001//curState=xx01 ^=1;// CurState=xx00
}//іщім перший одиничний?? ит
{prev=curState; pos=0; (prev!=0 amp; amp;! (Convert.ToBoolean (prev amp; 1)))