二分排序:
1、先将数据进行二分组,将组分到不能再分为止;
2、将组分到不能再分为止的,两块合并成一块,并且排序;
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void binary_merge_sort(int *vector,int left,int right)
{
if (vector == NULL)
{
return;
}int middle = (left + right) / 2;
if(right - left > 1)
{
binary_merge_sort(vector,left,middle);
binary_merge_sort(vector,middle + 1,right);
}int right_index = right;
int left_index = middle;
while (right_index > middle)
{
if(vector[right_index] > vector[left_index])
{
right_index--;
}
else
{
vector[right_index] = vector[left_index] ^ vector[right_index];
vector[left_index] = vector[left_index] ^ vector[right_index];
vector[right_index] = vector[left_index] ^ vector[right_index];int temp_index = left_index;
while( temp_index - 1 >= left && vector[temp_index] < vector[temp_index - 1] )
{
vector[temp_index] = vector[temp_index - 1] ^ vector[temp_index];
vector[temp_index - 1] = vector[temp_index - 1] ^ vector[temp_index];
vector[temp_index] = vector[temp_index - 1] ^ vector[temp_index];temp_index--;
}
}
}}
int main(int argc,char **argv)
{
int vector[] = {22,55,33,44,11,77,999,888,6541,789,934,10000,1000,100,234,8541,1024,698,1324,555,321,423,667,5521,235,348,668,1257};
binary_merge_sort(vector,0,sizeof(vector) / sizeof(int) - 1);
printf(" begin \n");
for (int index = 0; index <= sizeof(vector) / sizeof(int) - 1; index++)
{
printf(" %d \n",vector[index]);
}
printf(" end \n");
exit(0);}