折半插入排序

来源:互联网 发布:电商 用户数据指标 编辑:程序博客网 时间:2024/06/06 03:24
折半插入排序,优化了直接插入排序的寻找位置的过程,使用二分法寻找
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;#define T 1000000#define INF 999999int n,a[T],b[T];//折半插入排序int searchk(int *b,int l,int f,int key){    if(l==f)    {        if(key<b[l]) return l;        else return l+1;    }    else    {        int t=(l+f)/2;        if(key<b[t]) return searchk(b,l,t,key);        else return searchk(b,t+1,f,key);    }}void dichsort(int *a,int n){    memset(b,0,sizeof(b));    *b=*a;    for(int i=1;i<n;i++)    {        int p=searchk(b,0,i-1,a[i]);       // cout<<"p="<<p<<endl;        for(int k=i;k>p;k--)        b[k]=b[k-1];        b[p]=a[i];    }    for(int i=0;i<n;i++)        a[i]=b[i];}int main (){    while(scanf("%d",&n)!=EOF)    {        for(int i=0;i<n;i++)            scanf("%d",&a[i]);        dichsort(a,n);        int p=(n+1)/2;        printf("%d\n",a[p-1]);    }    return 0;}

原创粉丝点击