资源简介

随机产生5000 10000 50000 100000 200000个随机数,存入文本中,从文本中读取数据进行排序,排序后的结果存入另一文本

资源截图

代码片段和文件信息

#include
#include
#include 
#include
#include
#include
using namespace std;
#define TRUE 1
#define FALSE 0
#define MAXSIZE 200000 //一个用作示例的小顺序表的最大长度
#define LT(ab)((a)<(b))//定义一个函数
typedef int KeyType; //定义关键字类型为整数类型
typedef int InfoType;
typedef struct{
KeyType key; //关键字项
InfoType otherinfo; //其他数据项
}RedType; //记录类型
typedef struct{
 RedType r[MAXSIZE+1];//r[0]闲置或用作哨兵单元
int length; //顺序表长度
}SqList; //顺序表类型

//产生随机数,并将其存到磁盘中的“data.txt“文件中 
void save1(int n)
{
FILE *fp;
int inum;
if((fp=fopen(“data.txt““w“))==NULL)
printf(“打开文件错误。\n“);
// printf(“正在产生随机数...\n“);
srand((unsigned)time(NULL));
for(i=1;i<=n;i++) 
{
num=rand()%100;
fprintf(fp“%d\n“num);
// printf(“%d\t“num);
}
fclose(fp);
}

//将数组中已经排好序的数据保存到磁盘的“result.txt“文件中 

void save2(SqList &Lint n)
{
FILE *fp;
int i;
if((fp=fopen(“result.txt““w“))==NULL)
printf(“打开文件错误。\n“);
printf(“最终排序结果:\n“);
for(i=1;i<=n;i++) 
{
fprintf(fp“%d\n“L.r[i].key);
// printf(“%d\t“L.r[i].key);
}
fclose(fp);
}
//从磁盘中的“data.txt“文件中读取数据输出到数组中 
void read(SqList &Lint n)
{
FILE *fp;
int i;
if((fp=fopen(“data.txt““r“))==NULL)
printf(“打开文件错误。\n“);
// printf(“正在读取文件...\n“);
for(i=1;i<=n;i++) fscanf(fp“%d\n“&L.r[i].key);
fclose(fp);
L.length=n;
}
void print(SqList &Lint n)
{//用于每趟排序结果的打印
int i;
for(i=1;i<=n;i++)
{
printf(“%d\t“L.r[i].key);
}
}
void InsertSort(SqList &L){
//直接插入排序
double startfinish;
int ij;
start=clock();
    for(i=2;i<=L.length;i++)
{//插入n-1个记录 
L.r[0]=L.r[i];//将此元素赋值给哨兵
j=i-1;
while(L.r[0].key {
L.r[j+1]=L.r[j];
j--;
}
L.r[j+1]=L.r[0];
// print(LL.length);
// printf(“\n“);
}
finish=clock();
printf(“执行直接插入排序所需时间为%fseconds\n“(finish-start)/CLOCKS_PER_SEC);
}


//折半插入排序
void BinInsertSort(SqList &L)  
{  
double startfinish;
int ijlowmidhigh;
start=clock();
    for(i=2;i<=L.length;i++)  
    {  
        L.r[0]=L.r[i];  
        low=1;
high=i-1;  
        while(low<=high)  
        {  
            mid=(low+high)/2;  
            if(L.r[0].key                high=mid-1;  
            else  
                low=mid+1;  
        }  
        for(j=i-1;j>=high+1;--j)  
            L.r[j+1]=L.r[j];  
        L.r[high+1]=L.r[0];  
// print(LL.length);
// printf(“\n“);
    }  
finish=clock();
printf(“执行折半插入排序所需时间为%fseconds\n“(finish-start)/CLOCKS_PER_SEC);
}  
//希尔排序
void ShellInsert(SqList &Lint dk)  
{  
int ij;
for(i=dk+1;i<=L.length;++i)
{
if(LT(L.r[i].keyL.r[i-dk].key))
{
L.r[0]=L.r[i];
for(j=i-dk;j>0&<(L.r[0].keyL.r[j].key);j-=dk)
L.r[j+dk]=L.r[j];
L.r[j+dk]=L.r[0];
}

}
}  
void ShellSort(SqList &Lint dlta[]int t)
{
int k;
double startfinish;
start=clock();
for(k=0;k {
ShellInsert(Ldlta[k]);
// print(LL.l

评论

共有 条评论