Этот относительно простой алгоритм сортировки, разработанный для использования на параллельных процессорах, является модификацией пузырьковой сортировки. Суть модификации в том, чтобы сравнивать элементы массива под чётными и нечётными индексами с последующими элементами независимо. Алгоритм был впервые представлен Н. Хаберманом (N. Haberman) в 1972 году.
Заводится флаг, определяющий отсортирован ли массив. В начале итерации ставится в состояние «истина», далее каждый нечётный элемент сверяется с последующим и если они стоят в неправильном порядке (предыдущий больше следующего), то они меняются местами, и флаг ставится в состояние «ложь». То же самое делается с чётными элементами. Алгоритм не прекращает работу, пока флаг не останется в состоянии «истина».
template < typename T >
void oddEvenSorting(T *array, int arrayLength = -1) {
//Если неизвестен размер массива,то считаем его
if(arrayLength==-1) arrayLength=sizeof(array)/sizeof(array[0]);
for (int i = 0; i < arrayLength; i++) {
// (i % 2) ? 0 : 1 возвращает 1, если i четное, 0, если i не четное
for (int j = (i % 2) ? 0 : 1; j < arrayLength - 1; j += 2) {
if (array[j] > array[j + 1]) {
std::swap(array[j], array[j + 1]);
}
}
}
}
function oddEvenSorting(array) {
arrayLength=array.length; //длина массива
for (var i = 0; i < arrayLength; i++) {
// (i % 2) ? 0 : 1 возвращает 1, если i четное, 0, если i не четное
for (var j = (i % 2) ? 0 : 1; j < arrayLength - 1; j += 2) {
if (array[j] > array[j + 1]) {
[array[j], array[j + 1]]=[array[j+1],array[j]]; //swap
}
}
}
return array;
}
Для улучшения этой статьи желательно: |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .