int main () { int test[] = {1, 3, 6, 8, 9, 10, 14}; printf("%u\n", binary_sort(test, 10, 0, 6)); }
void binary_sort(T array[], int len) { if(len <= 1) return; else if(len == 2) { if(array[1] > array[0]) return; else { T tmp = array[0]; array[0] = array[1]; array[1] = tmp; return; } } else { T arr1[len/2]; T arr2[len - (len/2)]; int i; for(i = 0; i < len/2; i++) arr1[i] = array[i]; for(; i < len; i++) arr2[i - (len/2)] = array[i]; binary_sort(arr1, len/2); binary_sort(arr2, (len - len/2)); int j; for(i = j = 0; i < len/2 && j < (len - len/2);) { if(arr1[i] < arr2[j]) { array[i+j] = arr1[i]; i++; } else { array[i+j] = arr2[j]; j++; } } for(; j < (len - len/2); j++) array[i+j] = arr2[j]; for(; i < len/2; i++) array[i+j] = arr1[i]; } }
int binary_sort (int a[], int x, int min, int max) { int half = a[(int)(max+min)/2]; if (min > max) return -1; else if (half > x) { binary_sort(a, x, min, ((max+min)/2) - 1); } else if (half < x) { binary_sort(a, x, ((max+min)/2) + 1, max); } else { return (max+min)/2; } }