折半插入排序

#include<iostream>
using namespace std;

//折半插入排序,关键字的比较次数由于采用了折半查找而减少,但元素的移动次数仍不变

const int Maxsize=10;
int list[Maxsize];

void binasort(int list[],int n)
{
int i,j,t,low,high,mid;
for(i=1;i<n;i++)
{
t
=list[i];
low
=0;high=i-1;
while(low<=high)
{
mid
=(low+high)/2;
if(t>=list[mid])low=mid+1; //而不是t>list[mid],确保排序是稳定的
else high=mid-1;
}
for(j=i;j>low;j--)list[j]=list[j-1];
list[low]
=t;
}
}
void main()
{
int n,i;
cin
>>n;
for(i=0;i<n;i++)cin>>list[i];
binasort(list,n);
for(i=0;i<n;i++)cout<<list[i]<<" ";cout<<endl;

}

  

#include<iostream>
#include
<string>
using namespace std;

//折半插入排序,关键字的比较次数由于采用了折半查找而减少,但元素的移动次数仍不变

const int Maxsize=10;
struct data
{
int a;
string name;
};
data list[Maxsize];

void binasort(data list[],int n)
{
int i,j,t,low,high,mid;string str;
for(i=1;i<n;i++)
{
t
=list[i].a;str=list[i].name;
low
=0;high=i-1;
while(low<=high)
{
mid
=(low+high)/2;
if(t>=list[mid].a)low=mid+1; //而不是t>list[mid]确保排序是稳定的
else high=mid-1;
}
for(j=i;j>low;j--){list[j].a=list[j-1].a;list[j].name=list[j-1].name;}
list[low].a
=t;list[low].name=str;
}
}
void main()
{
int n,i;
cin
>>n;
for(i=0;i<n;i++)cin>>list[i].a>>list[i].name;
binasort(list,n);
for(i=0;i<n;i++)cout<<list[i].a<<" "<<list[i].name<<endl;

}

/*
5
55 55name
22 22name
44 44name
11 11name
33 33name
11 11name
22 22name
33 33name
44 44name
55 55name
请按任意键继续. . .
*/

  

posted on 2011-08-23 17:17  sysu_mjc  阅读(197)  评论(0编辑  收藏  举报

导航