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

利用随机函数产生N个随机整数,对这些数进行多种方法进行排序。要求:
一、至少采用三种方法实现上述问题求解(提示,采用的方法有插入排序、起泡排序、快速排序、选择排序)。并把排序后的结果保存在不同的文件中。
二、统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。
注意:四种排序方法都要有,并且不能缺少保存步骤
本人急求,最好两小时内做好,还有加分
高手们帮帮忙,谢啦

插入排序:

#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;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-07-21
调好了,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");
}
}
}
第2个回答  2011-07-20
可以提供些思路给你,完成的话太费时间了。追问

我有一个半成品,网上找的,那个排序都写好了,但是没有存储部分的语句,我可以发给你,在那上修改也行,帮个忙吧

追答

试试吧,qq27980909

第3个回答  2011-07-23
多看下书吧

用C语言编程组合与排列的生成,很着急。。高分悬赏。下周要交。悬赏可以...
include <stdio.h> int m,n,k;int array[1001];int flag[1001];void combination(int now,int lenght);void arrange();int main(){ scanf("%d %d", &m, &n);combination(1, 0);k = 0;arrange(0);printf("总共有%d种排列方式\\n", k);return 0;} void combination(int now, int...

C语言大神帮帮我啊!!帮帮忙,我悬赏高分帮帮忙!!在线等待
include "stdlib.h"long count=0;void Swap(int &a,int &b){ int temp=a;a=b;b=temp;} void Perm(int list[],int k,int m)\/\/k表示前缀的位置,m是要排列的数目.{ if(k==m-1)\/\/前缀是最后一个位置,此时打印排列数.{ int tag=0;for(int i=0;i<m;i++){ if(list[i]==i...

C语言编写一个程序,急用!!高分悬赏(正确答案追加分数)
n = rand() % 10;printf("请计算: %d + %d = ", m, n);result = m + n;scanf("%d", &input);if(input != result)printf("真可惜, 回答错误, 请再接再厉!\\n");else printf("恭喜你, 回答正确, 请继续加油!\\n");plu[i][0] = m;plu[i][1] = n;plu[i][2] = in...

...点要考试,C语言!救人一命胜造七级浮屠!高分悬赏,选中的好加100!谢 ...
13.c语言的字符串常量是用( 双引号" " )括起来的字符序列。14.break语句只能用于(循环)语句和(分支)语句中。15.设a=12,表达式a+=a-=a*=a预算后a的值是:( 0 )

高分悬赏,用C语言实现:获取汉字的首字母。
如果想知道一个汉字的首字母,而且不用汉字拼音对照,只有一种办法,就是根据汉字的GB2312编码规则找到规律,然后对比汉字编码属于哪个字母段,我以前写过一个Minigui的检索,就这样搞的 ,分类表见参考资料 参考资料:http:\/\/hi.baidu.com\/yunlongchn\/blog\/item\/f6e16ffbd4ea961b6d22ebc8.html ...

求高手解答一些简单的C语言题目!(高分悬赏)
After GlobalPlusPlus(), it is 2 2、over!3、(1)printf("Input a year:");scanf("%d",&year);(2)(0==year%4 && 0!=year%100) || 0==year%400 4、(1)s[i]!='\\0'(2)s[j]=s[i];5、include<stdio.h> main(){ int i=1,j=1;for(i=1;i<=9;i++){ for(j=1;...

高分悬赏,高手请进:)
\/\/帮你修改了几处错误,可以了 include<iostream> \/\/c++标准类库必须这样写 using namespace std;struct Llist { char name[20];int sign;Llist *next; \/\/去掉struct修饰,下面几行也是如此 };Llist *creat(){ Llist *p,*p1,*p2;int flag=0;cout<<"if you have finish instruction...

高分悬赏C语言学生籍贯信息记录簿设计
xianshi(); \/\/排序后输出 } void chazhao() { int m; char nativeplace[20],b; do { printf("\\n请输入想查找的学生籍贯:"); fflush(stdin); gets(nativeplace); for(m=0;m=20) printf("\\n\\t没有找到这个学生!!!\\n"); else { printf("\\t学号\\t姓名\\t籍贯\\n"); printf("\\...

求C++高手帮解:C语言表达式翻译 高分悬赏
转化成后缀式就是:ab+c*d-;意思就是a与b先进行计算,所以就先把a与b这两个操作数现在前面,然后再紧接着先运算符 表达式格式:(a+b)*c-d;其中a、b、c、d就是所说的变量(操作数),*+-就是所说的操作(运算符),()就是所说的小括弧 算术运算:+ - * \/ 关系运算:&&...

高分悬赏!关于C语言如何进阶学习
关于C语言本身:现在已经掌握了基础,可以学习一下C Primer这种外国人写的书,里面讲的会更深刻。进行其他语言的学习:比如C++,是一种以C为基础,但增加了面向对象等其他编程特性的语言,也更加常用;Python等脚本式的语言有着不同于C的有趣之处,也是可以学习的。面向应用的学习:学习语言的目的是编程...

相似回答
大家正在搜