还是同样的,自己学习,自己分析,加油!!
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#define N 10
int A[N],B[N],C[N];
//函数输出算法
/**/void output(int A[])
{
int i;
for(i=0;i<N;i++)
{
if(i%10==0)
printf("\n");
printf("%-4d",A[i]);
}
}
//输出随机数组算法
/**/int random(int A[])
{
int i;
srand((unsigned) time(NULL));
for (i=0;i<N;i++)
{
A[i]=rand()%400;
B[i]=A[i];
C[i]=A[i];
}
}
//选择排序算法
/**/int Choic(int A[])
{
int i,j,temp,k;
for(i=0;i<N-1;i++)
{
k=i;for(j=i+1;j<N;j++)
{
if(A[j]<A[k])
{
k=j;
temp=A[k];
A[k]=A[i];
A[i]=temp;
k=i;
}
}
}
return A;
}
//冒泡排序算法
/**/int Bubble(int A[])
{
int i,j,temp;
for(j=0;j<N-1;j++)
for(i=0;i<N-1-j;i++)
if(A[i]>A[i+1])
{
temp=A[i];
A[i]=A[i+1];
A[i+1]=temp;
}
return A;
}
//快速排序之霍尔排序算法
/**/int hoare(int A[],int low,int high)
{
int i,j,k;
i=low;
j=high;
k=A[i];
if( low < high)
{
while(i < j)
{
while((A[j] >= k) && (i < j))
{
j--;
}
A[i] = A[j];
while((A[i] <= k) && (i < j))
{
i++;
}
A[j]= A[i];
}
A[i] = k;
hoare(A,low,i-1);
hoare(A,j+1,high);
}
return A;
}
//总和
/**/int Sum(int A[])
{
int i,sum=0;//aver;
for(i=0;i<N;i++)
sum+=A[i];
return sum;
}
//平均数
/**/float Aver(int A[])
{
float aver;
float sum;
sum=Sum(A);
aver=sum/N;
//printf("\t\t%.2f",aver);
return aver;
}
//中位数
/**/void Median(int A[])
{
int i;
if(N&1==1)
printf("\t\t%d",A[N/2]); //通过位运算符来实现判断奇偶数!
else
printf("\t\t%.1f",(A[N/2-1]+A[N/2])/2.0);
}
//方差及标准差算法
/**//*float*/int Var(int A[])
{
int i;
float var=0.0,aver,st;
aver=Aver(A);
printf("%.3f",aver);
for(i=0;i<N;i++)
var=+pow ((A[i]-aver),2.0);
var=var/N;
printf("\t\t%.3f & ",var);
//
st=pow(var,0.5);
printf("%.3f\n",st);
return 0;
}
//总体 输出
/**/int Totle(int A[])
{
printf("\nMax number:\n");
printf("\t\t%d",A[N-1]);
printf("\nMin number:\n");
printf("\t\t%d",A[0]);
printf("\nMedian number:\n");
Median(A);
printf("\nAverage number:\n");
Aver(A);
printf("\t\t%.2f",Aver(A));
printf("\nSum number:\n");
printf("\t\t%d",Sum(A));
printf("\nVariance & standard deviation:\n");
Var(A);
return 0;
}
//验证算法的准确性
/**/void algorithm(int A[],int B[])
{
int i,t;
for(i=0;i<N;i++)
{
if(A[i]==B[i])
t=1;
else
t=0;
}
if(t==1) printf("Correct algorithm !\n");
if(t==0) printf("Algorithm is not correct !\n");
}
//判断算法的子菜单
/**/void Or()
{
int ch;
printf("\t\t\t算法判断算法菜单\n");
printf("********************************************************************************\n");
printf("1.冒泡法与选择法比较:\n");
printf("2.冒泡法与快速排序之霍尔排序算法比较:\n");
printf("3.选择法与快速排序之霍尔排序算法比较:\n");
printf("0.退出!;\n");
printf("********************************************************************************\n");
printf("请做出你的选择:");
scanf("%d",&ch);
switch(ch)
{
case 0:break;
case 1:algorithm(Bubble(A),Choic(B));Or();break;
case 2: algorithm(Bubble(A),hoare(C,0,N-1));Or();break;
case 3: algorithm(Choic(B),hoare(C,0,N-1));Or();break;
default :printf("DATA ERROR!\n");Or();break;
}
}
//主函数
/**/int main()
{
int i;
int ch;
printf("\t\t\t主菜单\n");
printf("********************************************************************************\n");
printf("1.随机生成200个数;\n");
printf("2.选用冒泡排序法进行排序;\n");
printf("3.选用选择排序法进行排序;\n");
printf("4.选用快速排序之霍尔排序算法进行排序;\n");
printf("5.输出数据的基本特征;\n");
printf("6.验证算法是否正确;\n");
printf("0.退出!;\n");
printf("********************************************************************************\n");
printf("请做出你的选择:");
scanf("%d",&ch);
switch(ch)
{
case 0:break;
case 1: random(A);output(A);main();break;
case 2: Bubble(A);output(A);main();break;
case 3: Choic(B);output(B);main();break;
case 4: hoare(C,0,N-1);output(C);main();break;
case 5: Totle(A);main();break;
case 6: Or();main();break;
default :printf("DATA ERROR!\n");main();break;
}
return 0;
}