二分插入排序

二分插入排序的基本思想是:利用二分搜索算法,在已有序序列中查找元素插入位置,将元素插入这个位置,这个位置后面的元素依次后移。

//
//  BinaryInsertSort.c
//  libin
//
//  Created by 李宾 on 16/4/28.
//  Copyright © 2016年 李宾. All rights reserved.
//

#include <stdio.h>
void BinaryInsertSort(int *p, int len)
{
    for (int i = 1; i < len; i ++) {
        if(p[i] > p[i-1])
        {
            continue;
        }
        int low = 0;
        int high = i - 1;
        int mid = 0;
        int temp = p[i];
        while (low <= high)
        {
            mid = (low + high)/2;
            if (temp < p[mid]) {
                high = mid - 1;
            }
            else
                low = mid + 1;       //low的位置就是插入的位置
        }
        //low到i的元素都要后移
        for(int j = i - 1; j >= low; j --)
        {
            p[j+1] = p[j];
        }
        
        p[low] = temp;
    }
}

int main()
{
    int a[6] = { 4, 1, 3, 15, 6, 40};
    BinaryInsertSort(a, 6);
    for (int i = 0; i < 6; i ++) {
        printf("%d\t", a[i]);
    }
        printf("\n");
}

 

posted @ 2016-04-28 22:34  32ddd  阅读(224)  评论(0编辑  收藏  举报