📄 改进1.cpp
字号:
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
const int n=100000;
typedef struct{
int key;
}RedType;
typedef struct{
RedType *r; //r[n+1];
int length;
}SqList;
int random();
void InsertSort(SqList &L);
void main(){
SqList L;
L.r = new RedType[n+1];
L.length=n;
for(int i=1;i<=n;i++) L.r[i].key=random();
long t1,t2;
t1=clock();
InsertSort(L);
t2=clock();
cout<<" 时间: "<<float(t2-t1)/CLK_TCK<<endl;
}
int random(){
int A=48271;
int M=2147483646;
int Q=M/A;
int R=M%A;
static int x=1; int x1;
x1=A*(x%Q)-R*(x/Q);
if(x1>=0) x=x1;
else x=x1+M;
return x;
}
void InsertSort(SqList &L) //直接插入排序少
{
int low,high,m;
//对顺序表L作折半插入排序。
for(int i=2;i<=L.length;++i)
{
L.r[0]=L.r[i]; //将L.r[i]暂存到L.r[0]
low=1;high=i-1;
while(low<=high)
{ //在r[low..high]中折半查找有序插入的位置
m=(low+high)/2; //折半
if (L.r[0].key<L.r[m].key) high=m-1; //插入点在低半区
else low=m+1; //插入点在高半区
}//while
for(int j=i-1;j>=high+1;--j)L.r[j+1]=L.r[j]; //记录后移
L.r[high+1]=L.r[0]; //插入
} //for
}//InsertSort
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -