69,373
社区成员
发帖
与我相关
我的任务
分享
#include <malloc.h>
#include <stdlib.h>
#include <stdio.h>
#define LS(a,b) ((a)<(b))
#define LL(a,b) ((a)>(b))
#define MAXSIZE 30000
typedef int KeyType;
typedef struct
{
int key;
}RedType;
typedef struct
{
RedType r[MAXSIZE+1];
int length;
}SqList;
typedef SqList HeapType;
int compare=0;
int change=0;
int Create_Sq(SqList &L)
{
int i,k;
printf("请输入产生随机数的个数:");
scanf("%d",&k);//cin>>k;
L.length=k;
for(i=1;i<=k;++i)
{
L.r[i].key=rand();
}
return 1;
}
void InsertSort(SqList &L)
{ //直接插入排序
int i,j;
fflush(stdin);
printf("\n");//----------
for(i=2;i<=L.length;++i)
if(LS(L.r[i].key,L.r[i-1].key))
{
++compare;
++change;
L.r[0]=L.r[i];
L.r[i]=L.r[i-1];
for(j=i-2;LS(L.r[0].key,L.r[j].key);--j)
{
++compare;
L.r[j+1]=L.r[j];
}
L.r[j+1]=L.r[0];
}
for(i=1;i<=L.length;i++)
printf("%d ",L.r[i].key);//---------
//cout<<" "<<L.r[i].key;
printf("\n-----插入排序后的序列-----\n");
printf("插入排序的比较次数:");
printf("%d \n",compare);//cout<<compare<<endl;
printf("\n插入排序的交换次数:");
printf("%d \n",change);//cout<<change<<endl;
compare=0;
change=0;
}
void main()
{
int i;
int dlta[MAXSIZE];
SqList L;
Create_Sq(L);
printf("\n-----待排序序列为-----\n");
//Create_Sq(L);
for(i=1;i<=L.length;i++)
printf("%d ",L.r[i].key);//--------
//cout<<" "<<L.r[i].key;
//SqList L2=L;
InsertSort(L);
}
printf("\n");