C语言四个数由大到小排列
可以将四个数先存到数组中,然后进行插入排序。
一、算法设计:
1、输入4个数;
2、使用任意方法进行排序;
3、输出结果。
二、算法优化:
如果选择插入排序,那么可以在输入过程中,同时完成排序操作,减少一次循环,提高效率。
三、参考代码:
#include stdio.h
int main()
{
int i,j,a[4],n;
for(i = 0; i 4; i++)//循环四次
{
scanf(“%d”,n);//输入一个数,并存在n中。
for(j = i-1; j=0; j–)//插入排序,查找要插入的位置。
{
if(a[j]=n) break;
a[j+1]=a[j];
}
a[j+1]=n;//插入n值。
}
for(i = 0; i 4; i ++)
printf(“%d “, a[i]);//输出结果。
return 0;
}
求算法高手,用希尔排序,插入,选择,冒泡四种排序方法编写成一个程序,用c 语言描述的
#includestdio.h
#includetime.h
#includemath.h
#includemalloc.h
void BubbleSort(int *L,int N)
{ //冒泡
int i,j;
int t;
for(i=1;i=N;i++)
{
for(j=N;ji;j–)
if(L[j]L[j-1])
{
t=L[j];
L[j]=L[j-1];
L[j-1]=t;
}
}
}
int SelectMinKey(int *L,int N,int n)
{
int i,min=n;
for(i=n+1;i=N;i++)
if(L[i]L[min])
min=i;
return min;
}
void SelectSort(int *L,int N)
{ //选择
int i,j;
int t;
for(i=1;iN;i++)
{
j=SelectMinKey(L,N,i);
if(i!=j)
{
t=L[i];
L[i]=L[j];
L[j]=t;
}
}
}
void InsertSort(int *L,int N)
{ //插入
int i,j;
for(i=2;i=N;i++)
{
if(L[i]L[i-1])
{
L[0]=L[i];
L[i]=L[i-1];
for(j=i-2;L[0]L[j];j–)
L[j+1]=L[j];
L[j+1]=L[0];
}
}
}
void ShellInsert(int *L,int N, int dk)
{ // 对顺序表L作一趟希尔插入排序。本算法对算法10.1作了以下修改:
// 1. 前后记录位置的增量是dk,而不是1;
// 2. r[0]只是暂存单元,不是哨兵。当j=0时,插入位置已找到。
int i,j;
for(i=dk+1;i=N;++i)
if(L[i]L[i-dk])
{ // 需将L.r[i]插入有序增量子表
L[0]=L[i]; // 暂存在L.r[0]
for(j=i-dk;(j0L[0]L[j]);j-=dk)
L[j+dk]=L[j]; // 记录后移,查找插入位置
L[j+dk]=L[0]; // 插入
}
} // ShellInsert
void ShellSt(int *L,int N, int dlta[], int t)
{ // 算法10.5
// 按增量序列dlta[0..t-1]对顺序表L作希尔排序。
for(int k=0;kt;++k)
ShellInsert(L,N, dlta[k]); // 一趟增量为dlta[k]的插入排序
} // ShellSort
void ShellSort(int *L,int N)
{ //希尔
int t=(int)log(N);
int k,*dlta;
dlta=(int*)malloc(t*4); //产生增量序列
for(k=0;kt;k++)
dlta[k]=(int)pow(2,t-k)-1;
ShellSt(L,N,dlta,t);
}
int main()
{
int N=250;
int i,j,k;
int t;
int ti[16];
int *L;
srand(time(NULL));
printf(“长度\t|冒泡\t|选择\t|插入\t|希尔\n”);
printf(“——–+————————————————————-“);
for(j=0;N100000;j++)
{
L=(int *)malloc((N+1)*4);
t=0;
for(i=1;i=N;i++)
L[i]=rand();
ti[t++]=clock();
BubbleSort(L,N);
ti[t++]=clock();
for(i=1;i=N;i++)
L[i]=rand();
ti[t++]=clock();
SelectSort(L,N);
ti[t++]=clock();
for(i=1;i=N;i++)
L[i]=rand();
ti[t++]=clock();
InsertSort(L,N);
ti[t++]=clock();
for(i=1;i=N;i++)
L[i]=rand();
ti[t++]=clock();
ShellSort(L,N);
ti[t++]=clock();
printf(“\n%d\t”,N);
for(k=0;k4;k++)
printf(“| %d\t”,(ti[2*k+1]-ti[2*k]));
N*=5;
}
printf(“\n\n”);
}
//这是我们当年学数据结构时我自己写的,给你改了一下,输出是对随机产生一些数,对四种算法进行比较,有问题可以hi我啊
c语言做各种排序算法比较程序怎么做?
按照程序设计的自顶向下,逐步求精的机构化程序设计思想来完成这个任务。
①大概的顶层框架是:随机数产生模块,文件保存模块,排序以及统计排序过程信息的模块。
②分别设计出随机数产生算法,三种排序算法。
③按照逻辑的顺序进行组装,并给出必要的过程信息。
算法的设计实现以及程序运行结果: