二分法插入排序(以数组为例)

其思路在:假设在a[i]之前的数组元素都是已经是有序排列的,那么我们所需要实现的是,在有序数组中,找到两个相邻的元素,使a [i]大小在他们之间,然后插入即可。具体的实现代码如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{   int i = 1;
    int n = 20;
    int j = 0;
    int a[20]={45,98,4,65,87,6,44,66,78,52,65,22,55,55,25,78,52,56,23,12};
    int tail,head,mid;
    int temp;


    for(i = 1 ; i < n ; i ++)
    {
        temp = a[i];
        tail = 0;
        head = i-1;

        while(tail <= head )
        {
            mid = (tail + head )/2;
            if(a[i] > a[mid])
            {
                tail = mid + 1;
            }
            else
            {
                head = mid - 1;
            }
        }

        for(j = (i - 1); j >= head +1 ; j--)
        {
            a[j+1] = a [j];
        }

        a[head + 1] = temp;
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_36907160/article/details/82709857
今日推荐