• 大小: 5KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-05-16
  • 语言: C/C++
  • 标签:

资源简介

设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。

资源截图

代码片段和文件信息

#include
#include
#include
#include
#define LIST_INIT_SIZE 50000
int bj1yd1n;
clock_t start_tend_t;
typedef struct 
{
 int key; 
}ElemType;
typedef struct 
{
 ElemType *elem;
 int length;
}SqList;
void addlist(SqList &L)
{
 int i;
a: printf(“请输入你要输入的个数:“);
 scanf(“%d“&n);
 if(n>50000)
 {
  printf(“超出范围重新输入!!!\n“);
  goto a;
 }
 L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
 if(!L.elem)exit(0);
 L.length=0;
 for(i=1;i {
b:  L.elem[i].key=rand();
  if(L.elem[i].key>30000)goto b;
     ++L.length;
 }
}
void SelectSort(SqList &L)//选择
{
 start_t=clock();
 int ijkbj=0yd=0;
 for(i=1;i {
  k=i;
  for(j=i+1;j  {
   bj++;
   if(L.elem[j].key  }
  if(i!=k)
  {
   L.elem[0].key=L.elem[i].key;
   L.elem[i].key=L.elem[k].key;
   L.elem[k].key=L.elem[0].key;
   yd+=3;
  }
 }
 end_t=clock();
 printf(“比较次数为       %d移动次数为       %d\n“bjyd);
 printf(“排序用时为       %f\n“float(end_t-start_t)/CLK_TCK);
}
void qipao(SqList &L)//起泡
{
 start_t=clock();
 int i=1jbj=0yd=0;
 while(i {
  for(j=1;j  {
   bj++;
   if(L.elem[j].key>L.elem[j+1].key)
   {
    L.elem[0].key=L.elem[j].key;
    L.elem[j].key=L.elem[j+1].key;
    L.elem[j+1].key=L.elem[0].key;
    yd+=3;
   }
  }
  i++;
 }
 end_t=clock();
 printf(“比较次数为       %d移动次数为       %d\n“bjyd);
 printf(“排序用时为       %f\n“float(end_t-start_t)/CLK_TCK);
}
void InsertSort(SqList &L)//直接插入
{
 start_t=clock();
 int ijyd=0bj=0;
 for(i=2;i<=L.length;i++)
 {
  if(L.elem[i].key  {
   L.elem[0].key=L.elem[i].key;
   yd++;
   j=i-1;
   bj++;
   while(L.elem[0].key   {
    L.elem[j+1].key=L.elem[j].key;
    j--;
    yd++;
    bj++;
   }
   L.elem[j+1].key=L.elem[0].key;
   yd++;
  }
 }
 end_t=clock();
 printf(“比较次数为       %d移动次数为       %d\n“bjyd);
 printf(“排序用时为       %f\n“float(end_t-start_t)/CLK_TCK);
}
void xier(SqList &L)//希尔
{
 start_t=clock();
 int id=L.length/2jw=0kyd=0bj=0;
 while(w {
  w=1;
  for(i=w;i  {
   k=i;
   for(j=i+d;j   {
    if(L.elem[i].key>L.elem[j].key)
    {
     k=j;
     bj++;
    }
   }
   if(i!=k)
   {
    L.elem[0].key=L.elem[i].key;
    L.elem[i].key=L.elem[k].key;
    L.elem[k].key=L.elem[0].key;
    yd+=3;
   }
   w++;
  }
  d=d/2;
  w=1;
 }
 end_t=clock()

评论

共有 条评论

相关资源