——天道酬勤
直接插入排序c代码如下:
#include<stdlib.h>
#include<time.h>
#include<iostream>
using namespace std;
#define num 10
#define scope 100
void initarray(int *s) //数组初始化,利用srand和rand生成伪随机数
{
srand((unsigned)time(NULL));
for(int i=1;i<=num;i++)
{
s[i]=rand()%scope;
}
}
void insertsorted(int *s,int len)
{
int i,j;
for(i=2;i<=len;i++)
{
s[0]=s[i]; //监视哨
for(j=1;j<i;j++)
{
if(s[0]<s[j])
{
for(int k=i;k>j;k--) //数据后移,空出插入位置
{
s[k]=s[k-1];
}
s[j]=s[0];
break;
}
}
}
}
void show(int *s,int len)
{
for(int i=1;i<=len;i++)
{
cout<<s[i]<<' ';
if(i%10==0)
{
cout<<endl;
}
}
}
int main()
{
int s[num+1];
initarray(s);
insertsorted(s,num);
show(s,num);
system("pause");
return 0;
}
折半插入排序:
void midinsorted(int *s,int len)
{
int i,j;
int low,mid,high;
for(i=2;i<=len;i++)
{
s[0]=s[i];
low=1;
high=i-1;
for(j=1;j<i;j++)
{
mid=(high+low)/2;
if(s[0]<s[mid])
{
high=mid-1;
}
else
{
low=mid+1;
}
if(low>high)
{
for(int k=i;k>mid;k--)
{
s[k]=s[k-1];
}
s[low]=s[0];
}
}
}
}