算法程序代写
算法程序代写
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MaxSize 100
typedef struct File
{
char name[10];
int size;
int day;
char fun[10];
}DateType;
typedef struct SeqList
{
DateType data[MaxSize];
int last;
}SeqList;
//初始化
SeqList* Init_SeqList()
{
SeqList* L = new SeqList;
if (L)
{
L->last = -1;
return L;
}
}
//查找算法
int Location_SeqList(SeqList *L, DateType x)
{
int i = 0;
while (i <= L->last && L->data[i].name == x.name)//如果直接进行比较(L->data[i]==x),会报错。自定义的数据类型不能直接比较。有多种方法,可以解决这个问题
i++;
if (i > L->last)
return -1;
else
return i;
}
//名称顺序查找算法 算法程序代写
int SqSearch(SeqList *R, int n, DateType k)
{
int i = 0;
while (i < n&&R->data [i].name!=k.name)
i++;
if (i >= n)
return 0;
else
return i + 1;
}
//
//
//大小 堆排序->二分查找 算法
//
//堆排序
void Print(SeqList L)
{
printf(“降序输出:”);
for (int i = 1; i <= L.last; i++)
printf(“%d “, L.data[i].size);
printf(“\n\n”);
}
void HeapAdjust(SeqList &H, int s, int m)
{
//已知H.r[s..m]中记录的关键字除H.r[s].key之外均满足堆的定义
//本函数调整H.r[s]的关键字,使H.r[s..m]成为一个大顶堆
DateType rc = H.data[s];
for (int j = 2 * s; j <= m; j *= 2)
{ //沿key较大的孩子节点向下筛选
if (j < m && H.data[j].size>= H.data[j + 1].size) ++j;//j为key较大的记录的下标
if (rc.size < H.data[j].size) break; //rc应插入在位置s上
H.data[s] = H.data[j];
s = j;
}
H.data[s] = rc; //插入
}
void swap(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
void HeapSort(SeqList &H)
{
int tem;
//对顺序表H进行堆排序
for (int i = H.last/ 2; i >0; i–) //把H.r[1..H.length]建成大顶堆
HeapAdjust(H, i, H.last);
for (int i = H.last; i > 1; i–) {
//swap(H.data[1].size, H.data[i].size); //将堆顶记录和当前未经排序的子序列H[1..i]中最后一个记录相互交换
tem = H.data[1].size;
H.data[1].size=H.data[i].size;
H.data[i].size=tem;
HeapAdjust(H, 1, i-1 );//将H.r[1..i-1]重新调整为大顶堆
}
}
///
//二分查找算法 算法程序代写
int BinSearch(SeqList *L, int n,int k)//n个值的R的顺序表中查找k
{
int low = 0, high = n – 1, mid;
while (low <= high)
{
mid = (low + high) / 2;
if (L->data[mid].size == k) //中间值等于关键值 找到
return mid + 1;
if (L->data[mid].size > k) //中间值大于关键值 小的半边查找
high = mid – 1;
else //中间值小于关键值 大的半边查找
low = mid + 1;
}
return 0;
}
//
//
//日期快速排序
void Printt(SeqList *L)
{
int i;
for (i = 0;i < L->last;i++)
{
printf(“%d,”, L->data[i].day);
}
printf(“\n”);
}
void Printt(SeqList L) {
printf(“升序输出:”);
for (int i = 1; i <= L.last; i++)
printf(“%d “, L.data[i].day);
printf(“\n\n”);
}
int Patition(SeqList &L, int low, int high) {
//交换顺序表L中子表r[low..high]的记录,枢轴记录到位,并返回其所在位置
//此时在它之前(后)的记录均不大于(小于)它
L.data[0] = L.data[low]; //用子表的第一个记录作枢轴记录
int pivotkey = L.data[low].day; //枢轴记录关键字
while (low < high) { //从表的两端向中间扫描
while (low < high && L.data[high].day >= pivotkey)
–high;
L.data[low] = L.data[high]; //将比枢轴小的记录移动到低端
while (low < high && L.data[low].day <= pivotkey)
++low;
L.data[high] = L.data[low]; //将比枢轴大的记录移动到高端
}
L.data[low] = L.data[0]; //枢轴记录到位
return low; //返回枢轴位置 算法程序代写
}
void QSort(SeqList &L, int low, int high)
{
//对顺序表L中的子序列L.r[low…high]做快速排序
if (low < high)
{ //长度大于等于1
int pivotloc = Patition(L, low, high); //一分为二
QSort(L, low, pivotloc – 1); //对低子表递归排序
QSort(L, pivotloc + 1, high); //对高子表递归排序
}
}
void QuickSort(SeqList &L)
{
//对顺序表L做快速排序
QSort(L, 1, L.last);
Printt(L);
}
//日期顺序查找
//
//
//
//插入算法
int Insert_SeqList(SeqList *L, int i, DateType x)
{
int j;
if (L->last + 1 == MaxSize)
return -1;
if (i<1 || i>L->last + 2)
return 0;
for (j = L->last;j >= i – 1;j–)
L->data[j + 1] = L->data[j];
L->data[i – 1] = x;
L->last++;
return 1;
}
//输出信息
void printall(SeqList *L)
{
for (int i = 0;i <= L->last;i++)
{
printf(“%s”,L->data[i].name);
printf(“%d”,L->data[i].size);
printf(“%d”,L->data[i].day);
printf(“%c”,L->data[i].fun);
printf(“\n”);
}
}
int main()
{
SeqList* p = Init_SeqList(); 算法程序代写
//输入四组文件信息
printf(“四组文件信息为\n”);
/////
/*FILE f1 信息详述*/
DateType f1;
strcpy(f1.name, “are”);
strcpy(f1.fun, “txt”);
f1.size = 6;
f1.day = 1;
p->data[1] = f1;
p->last = 1;
printf(“%d:\n DataType.size:%d:\n DataType.day:%d\n DataType.name:%s\n DataType.fun:%s\n”, p->last, f1.size, f1.day, f1.name, f1.fun);
/*FILE f2 信息详述*/
DateType f2;
strcpy(f2.name, “bre”);
strcpy(f2.fun, “doc”);
f2.size = 7;
f2.day = 3;
p->data[2] = f2;
p->last = 2;
printf(“%d:\n DataType.size:%d:\n DataType.day:%d\n DataType.name:%s\n DataType.fun:%s\n”, p->last, f2.size, f2.day, f2.name, f2.fun);
/*FILE f1 信息详述*/
DateType f3;
strcpy(f3.name, “cre”);
strcpy(f3.fun, “m”);
f3.size = 3;
f3.day = 6;
p->data[3] = f3;
p->last = 3;
printf(“%d:\n DataType.size:%d:\n DataType.day:%d\n DataType.name:%s\n DataType.fun:%s\n”, p->last, f3.size, f3.day, f3.name, f3.fun);
/*FILE f1 信息详述*/
DateType f4;
strcpy(f4.name, “dre”);
strcpy(f4.fun, “xls”);
f4.size = 8;
f4.day = 9;
p->data[4] = f4;
p->last = 4;
printf(“%d:\n DataType.size:%d:\n DataType.day:%d\n DataType.name:%s\n DataType.fun:%s\n”, p->last, f4.size, f4.day, f4.name, f4.fun);
//printf(“\n\n\t\t\t按任意键继续”);
//不经过键盘缓冲区输入
//getchar();
//清屏
//system(“cls”);
int flag; 算法程序代写
while (1)
{
printf(“\t\t***欢迎文件查找***”);
printf(“\n\t\t请输入你需要进行的操作:\n”);
printf(“\n\t\t\t1.按名称查找信息\n”);
printf(“\n\t\t\t2.按大小排序信息\n”);
printf(“\n\t\t\t3.按大小查找信息\n”);
printf(“\n\t\t\t4.按日期排序信息\n”);
printf(“\n\t\t\t5.按日期查找信息\n”);
scanf_s(“%d”, &flag);
if (flag == 1)
{
printf(“请输入要查找的名称:”);
char k;
scanf(“%s”,&k);
}
if (flag == 2)
{
SeqList L;
HeapSort(*p);
Print(*p);
}
if (flag == 3)
{
printf(“请输入要查找的大小:”);
}
if (flag == 4)
{
SeqList L;
QSort(*p,p->data->day,p->data->day);
Printt(*p);
}
if (flag == 5)
{
DateType d;
printf(“请输入要查找的日期”);
scanf(“%d”, &d.day);
int l = Location_SeqList(p,d);
if (l ==-1)
printf(“对不起,文件不存在!!\n”);
else
printf(“文件的位置%d\n”,l);
}
}
printf(“\n\n\t\t\t按任意键继续”);
//不经过键盘缓冲区输入
getchar();
//清屏
system(“cls”);
}