How it works
Alternates between odd-indexed and even-indexed passes, comparing and swapping adjacent pairs. Originally designed for parallel processors.
Implementation
function oddEvenSort(arr) { let sorted = false; while (!sorted) { sorted = true; for (let i = 1; i < arr.length-1; i += 2) if (arr[i] > arr[i+1]) { [arr[i], arr[i+1]] = [arr[i+1], arr[i]]; sorted = false; } for (let i = 0; i < arr.length-1; i += 2) if (arr[i] > arr[i+1]) { [arr[i], arr[i+1]] = [arr[i+1], arr[i]]; sorted = false; } } }
def odd_even_sort(arr): sorted_flag = False while not sorted_flag: sorted_flag = True for i in range(1, len(arr)-1, 2): if arr[i] > arr[i+1]: arr[i], arr[i+1] = arr[i+1], arr[i] sorted_flag = False for i in range(0, len(arr)-1, 2): if arr[i] > arr[i+1]: arr[i], arr[i+1] = arr[i+1], arr[i] sorted_flag = False
void oddEvenSort(vector<int>& arr) { bool sorted = false; while (!sorted) { sorted = true; for (int i = 1; i < (int)arr.size()-1; i += 2) if (arr[i] > arr[i+1]) { swap(arr[i], arr[i+1]); sorted = false; } for (int i = 0; i < (int)arr.size()-1; i += 2) if (arr[i] > arr[i+1]) { swap(arr[i], arr[i+1]); sorted = false; } } }
void OddEvenSort(int[] arr) { bool sorted = false; while (!sorted) { sorted = true; for (int i = 1; i < arr.Length-1; i += 2) if (arr[i] > arr[i+1]) { (arr[i], arr[i+1]) = (arr[i+1], arr[i]); sorted = false; } for (int i = 0; i < arr.Length-1; i += 2) if (arr[i] > arr[i+1]) { (arr[i], arr[i+1]) = (arr[i+1], arr[i]); sorted = false; } } }
void oddEvenSort(int arr[], int n) { int sorted = 0; while (!sorted) { sorted = 1; for (int i = 1; i < n-1; i += 2) if (arr[i] > arr[i+1]) { int t = arr[i]; arr[i] = arr[i+1]; arr[i+1] = t; sorted = 0; } for (int i = 0; i < n-1; i += 2) if (arr[i] > arr[i+1]) { int t = arr[i]; arr[i] = arr[i+1]; arr[i+1] = t; sorted = 0; } } }