二分插入排序

来源:互联网 发布:根据数据库生成网页 编辑:程序博客网 时间:2024/06/05 00:47

2016.10.30

【算法思想】
核心是插入排序,找合适的位置的时候使用了二分算法

【代码实现】

# include <stdio.h>int n = 5;int a[10005];void binary_insertion_sort(void);int binary_search(int , int );int main(void){    int i;    scanf("%d", &n);    for (i = 1; i <= n; ++i)        scanf("%d", &a[i]);    binary_insertion_sort();    for (i = 1; i <= n; ++i)        printf("%d\n", a[i]);    return 0;} void binary_insertion_sort(void){    int i, j, index, t, k;    for (i = 2; i <= n; ++i)    {        index = binary_search(i-1, a[i]);        t = a[i];        for (k = 0; k <= i-index-1; ++k)            a[i-k] = a[i-k-1];        a[index] = t;    }}int binary_search(int r, int k){    int mid, l = 1;    while (l < r - 1)    {        mid = (l + r) / 2;        if (a[mid] < k)            r = mid - 1;        else            l = mid;    }    if (a[r] > k)        return r + 1;    else if (a[l] < k)        return l;    else         return r;}
1 0
原创粉丝点击