//算法8.1 直接插入排序
//2018年11月26日
#include <iostream>
#include<stdlib.h>
using namespace std;
#define MAXSIZE 20 //顺序表的最大长度
typedef struct
{
int key;
char *otherinfo;
}ElemType;
//顺序表的存储结构
typedef struct
{
ElemType *r; //存储空间的基地址
int length; //顺序表长度
}SqList; //顺序表类型
void InsertSort(SqList &L)
{
//对顺序表L做直接插入排序
int i,j;
for(i=2;i<=L.length;++i)
if(L.r[i].key<L.r[i-1].key)
{ //"<",需将r[i]插入有序子表
L.r[0]=L.r[i]; //将待插入的记录暂存到监视哨中
L.r[i]=L.r[i-1]; //r[i-1]后移
for(j=i-2; L.r[0].key<L.r[j].key;--j) //从后向前寻找插入位置
L.r[j+1]=L.r[j]; //记录逐个后移,直到找到插入位置
L.r[j+1]=L.r[0]; //将r[0]即原r[i],插入到正确位置
} //if
}
void BInsertSort(SqList &L)
{
int i,j;
for(i = 2;i <= L.length; ++i)
{
L.r[0] = L.r[i];
int low = 1,high = i -1 ;
while(low <= high)
{
int m;
m = (low + high)/2;
if(L.r[0].key < L.r[m].key)
high = m - 1;
else
low = m + 1;
}
for(j = i - 1;j >= high + 1; --j)
{
L.r[j + 1] = L.r[j];
}
L.r[high + 1] = L.r[0];
}
}
//InsertSort
int main()
{
SqList L;
L.r = new ElemType[MAXSIZE+1];
int n,i,j;
printf("请输入元素个数:");
scanf("%d",&n);
L.length=n;
for(i=1 ;i<=n ;i++)
{
L.r[i].key = rand();
}
// for(i=1 ;i<=n ;i++)
// {
// cin>>L.r[i].key;
// }
// InsertSort(L);
BInsertSort(L);
for(i=1;i<=n;i++)
{
cout<<L.r[i].key<<" ";
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
int main()
{
int array[10000];
int i=0;
for(i=1;i<10000;i++)
{
array[i]=rand();
}
for(i=1;i<10000;i++)
{
printf("%d ",array[i]);
}
return 0;
}