Материал: Исследование методов сортировки выбором

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

// indexLastTop - индекс крайней вершины

// nextPosHeapItemsAmount - количество элементво в кучи, вершина которой оказалось максимальной из всех вершин куч

// Возврат: индекс элемента(одной из вершин кучи), который больше чем остальные вершины кучint findPosMaxElem(int[] mas, int curState, int indexLastTop, ref int nextPosHeapItemsAmount) // Функция поиска максимального элемента среди вершин куч

{pos = 0;

// ищим позицию первого единичного бита

while (!Convert.ToBoolean(curState & 1))

{>>= 1;++;

}posMaxTopElem = indexLastTop;= pos;curTopElem = indexLastTop - LeoNum[pos];>>= 1;++;(curState != 0)

{((curState & 1) != 0)

{(mas[curTopElem] > mas[posMaxTopElem])

{= curTopElem;= pos;

}-= LeoNum[pos];

}>>= 1;++;

}posMaxTopElem;

}

void smoothSort(int[] mas) // функция плавная сортировки

{_heap_pool(mas); // вызов функции, создающей последовательность куч из произвольного массива

for (int i = mas.Length - 1; i >= 0; i--)

{nextPosHeapItemsAmount = 0;posMaxTopElem = findPosMaxElem(mas, curState, i, ref nextPosHeapItemsAmount); // максимальный верхний элемент кучи получает значение в виде результата функции findPosMaxElem(posMaxTopElem != i)

{(ref mas[i], ref mas[posMaxTopElem]); // вызываем функцию swap и передаем в нее значения mas[i] и mas[posMaxTopElem](mas, nextPosHeapItemsAmount, posMaxTopElem); // вызываем функцию shiftDown

}(ref curState); // вызываем функцию PreveState и передаем значения, ссылаясь(ref) на значение переменной curState

}

}void swap(ref int a, ref int b) // функция перестановки(swap)

{temp = b;= a;= temp;

}

}

}