二分排序

二分排序:

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);

    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值