資源簡介
隨機產生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
- 上一篇:MFC貪吃蛇游戲源代碼
- 下一篇:C++讀取csv到數組.zip
評論
共有 條評論