高分悬赏,C语言课设,排序问题,高手请帮忙

利用随机函数产生N个随机整数,对这些数进行多种方法进行排序。要求:一、至少采用三种方法实现上述问题求解(提示,采用的方法有插入排序、起泡排序、快速排序、选择排序)。并把排... 利用随机函数产生N个随机整数,对这些数进行多种方法进行排序。要求:
一、至少采用三种方法实现上述问题求解(提示,采用的方法有插入排序、起泡排序、快速排序、选择排序)。并把排序后的结果保存在不同的文件中。
二、统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。
注意:四种排序方法都要有,并且不能缺少保存步骤
本人急求,最好两小时内做好,还有加分
高手们帮帮忙,谢啦
展开
 我来答
hx0698
2011-07-20 · TA获得超过3430个赞
知道小有建树答主
回答量:94
采纳率:0%
帮助的人:148万
展开全部
插入排序:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 100
int main()
{
long a[MAX],n;
int i,j,k;
printf("请输入数据个数(<100):");
scanf("%ld",&n);
printf("原数据:");
srand((unsigned long)time(0));
for(i=1;i<=n;i++)
{ a[i]=rand()*100/RAND_MAX;
printf("%d",a[i]);
}
printf("\n");
for(i=2;i<=n;i++)
{ a[0]=a[i];
for(j=1;j<i;j++)
{ if(a[i]<a[j])
{for(k=i;k>=j+1;k--)
a[k]=a[k-1];
a[j]=a[0];
}
}
}
for(j=1;j<=n;j++)
printf("%3ld",a[j]);
printf("\n");
system("pause");
return 0;
}
起泡排序:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 100
int main()
{
long a[MAX],n;
int i,j,kz;
printf("请输入数据个数(<100):");
scanf("%ld",&n);
printf("原数据:");
srand((unsigned long)time(0));
for(i=1;i<=n;i++)
{ a[i]=rand()*100/RAND_MAX;
printf("%d",a[i]);
}
printf("\n");
for(i=1;i<=n-1;i++)
{ kz=1;
for(j=1;j<=n-1;j++)
if(a[j]>a[j+1])
{ kz=0;
a[0]=a[j]; a[j]=a[j+1]; a[j+1]=a[0];
}
if(kz) break;
}
for(j=1;j<=n;j++)
printf("%3ld",a[j]);
printf("\n");
system("pause");
return 0;
}
选择排序:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 100
int main()
{
long a[MAX],t,n;
int i,j,mini;
printf("请输入数据个数(<100):");
scanf("%ld",&n);
printf("原数据:");
srand((unsigned long)time(0));
for(i=1;i<=n;i++)
{ a[i]=rand()*100/RAND_MAX;
printf("%d",a[i]);
}
printf("\n");
for(i=1;i<=n-1;i++)
{ mini=i;
for(j=i+1;j<=n;j++)
if(a[j]<a[mini])
{ mini=j;
t=a[i]; a[i]=a[mini]; a[mini]=t;
}
}
for(j=1;j<=n;j++)
printf("%3ld",a[j]);
printf("\n");
system("pause");
return 0;
}
成寒梦
2011-07-21 · TA获得超过1260个赞
知道小有建树答主
回答量:963
采纳率:0%
帮助的人:622万
展开全部
调好了,vc6.0运行通过,花了两个小时,主要是链表排序以前没练过

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define ID struct id
struct id
{
char name[20];
int num;
int a;
int b;
int c;
double ave;
ID *next; //
};

int pc=0;

ID *creat()
{
ID *p1,*p2,*head;
int pd;
p1=p2=head=NULL;
printf("\t\t\t 开始输入记录(学号0结束)!\n");
while(1)
{
printf("请输入学生的学号:\n");scanf("%d",&pd);
if(pd==0) break;
p1=(ID*)malloc(sizeof(ID));
p1->num=pd;
printf("请输入学生的姓名:\n");scanf("%s",p1->name);
printf("请输入学生的语文成绩:\n");scanf("%d",&p1->a);
printf("请输入学生的数学成绩:\n");scanf("%d",&p1->b);
printf("请输入学生的外语成绩:\n");scanf("%d",&p1->c);
p1->ave=(p1->a+p1->b+p1->c)/3.0;

if(head==NULL)
{
head=p1;
p2=p1;
}
else
{
p2->next=p1;
p2=p1;
}
pc++;
}
p2->next=NULL;
return(head);
}

ID *sort(ID *head)
{
int temp;
char str[100];
double dbl;
ID *p1,*p2;
for(p1=head;p1!=NULL;p1=p1->next)
{

for(p2=p1->next;p2!=NULL;p2=p2->next)
{
if(p1->ave<p2->ave)
{
temp=p1->num;
p1->num=p2->num;
p2->num=temp;
strcpy(str,p1->name);
strcpy(p1->name,p2->name);
strcpy(p2->name,str);
temp=p1->a;
p1->a=p2->a;
p2->a=temp;
temp=p1->b;
p1->b=p2->b;
p2->b=temp;
temp=p1->c;
p1->c=p2->c;
p2->c=temp;
dbl=p1->ave;
p1->ave=p2->ave;
p2->ave=dbl;
}
}
}
printf("排序成功!!!\n");
return (head);
}

/*输入/添加记录*/
ID *insert(ID *head)
{
ID *temp,*p1,*p2;
printf("插入操作开始!!!\n");
temp=(ID *)malloc(sizeof(ID));
printf("请输入学生的学号:\n");scanf("%d",&temp->num);
printf("请输入学生的姓名:\n");scanf("%s",temp->name);
printf("请输入学生的语文成绩:\n");scanf("%d",&temp->a);
printf("请输入学生的数学成绩:\n");scanf("%d",&temp->b);
printf("请输入学生的外语成绩:\n");scanf("%d",&temp->c);
temp->ave=(temp->a+temp->b+temp->c)/3.0;

if (head==NULL)
{
head=temp;
temp->next=NULL;
}
else
{
p1=head;
while(p1!=NULL && p1->ave > temp->ave)
{
p2=p1;
p1=p1->next;
}
p2->next=temp;
temp->next=p1;
}

printf("插入成功");
pc++;
return (head);
}

/*删除学生记录*/
ID *delet(ID *head)
{
ID *p1,*p2;
int num;
printf("请输入要删除的学生的学号:");scanf("%d",&num);
p1=head;
if (head==NULL)
{
printf("没有记录\n");
goto end;
}
while(num!=p1->num && p1!=NULL)
{
p2=p1;p1=p1->next;
}
if(num==p1->num)
{
if (p1==head)
head=p1->next;
else
p2->next=p1->next;
printf("删除成功!!!\n");
pc--;
}
end:return head;
}

/*查找学生记录*/
ID *search(ID *head)
{
ID *p1,*p2;
char str[100];
printf("请输入要查找的学生的姓名:");scanf("%s",str);
p1=head;
while(strcmp(str,p1->name) && p1!=NULL)
{
p2=p1;p1=p1->next;
}
if(strcmp(str,p1->name)==0)
{
printf("学生的学号:%d\n",p1->num);
printf("学生的姓名:%s\n",p1->name);
printf("学生的语文成绩:%d\n",p1->a);
printf("学生的数学成绩:%d\n",p1->b);
printf("学生的外语成绩:%d\n",p1->c);
printf("学生的平均成绩:%.2lf\n",p1->ave);
}
return head;
}

/*显示结果函数*/
void print(ID *head)
{
ID *p;
p=head;
printf("\t\t\t*****************\n");
printf("显示结果是:\n");
if(head!=NULL)
do
{
printf("%10d%10s%10d%10d%10d%10.2lf\n",p->num,p->name,p->a,p->b,p->c,p->ave);
p=p->next;
} while(p!=NULL);
}

void main()
{
ID *head=NULL;
int choise;
printf("\t\t\t* * * * C语言课设* * * *\n");
while(1)
{
printf("\t\t 学生信息管理系统\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("\t\t 1.输入\n");
printf("\t\t 2.显示\n");
printf("\t\t 3.查找\n");
printf("\t\t 4.排序\n");
printf("\t\t 5.插入\n");
printf("\t\t 6.删除\n");
printf("\t\t 0.退出\n");
printf("\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("请选择(0-6):");
scanf("%d",&choise);
switch(choise)
{
case 1: head=creat();
break;
case 2: print(head);
break;
case 3: head=search(head);
break;
case 4: head=sort(head);
break;
case 5: head=insert(head);
break;
case 6: head=delet(head);
break;
case 0:
exit(0);
break;
default :printf("输入错误,请重新输入!\n");
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
anan640925
2011-07-20 · TA获得超过5421个赞
知道大有可为答主
回答量:4868
采纳率:51%
帮助的人:1311万
展开全部
可以提供些思路给你,完成的话太费时间了。
追问
我有一个半成品,网上找的,那个排序都写好了,但是没有存储部分的语句,我可以发给你,在那上修改也行,帮个忙吧
追答
试试吧,qq27980909
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
海迪泰拳谷1737
2011-07-23 · 贡献了超过195个回答
知道答主
回答量:195
采纳率:0%
帮助的人:52万
展开全部
多看下书吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式