自动生成随机数组及排序
话不多说,代码奉上,愿今后的我可以看到之前代码的卓略表演:
代码
#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;
}
其中重要的部分:
霍尔排序算法
//功能:快速排序之霍尔排序算法
//参数:int A[]:处理的数组 int low:开始下标 int high:结束下标
//返回值:int类型返回??
//这个,复用性太低,int A[]其实就是一个数组指针罢了,但是这种写法,有点,,无语,,
//参数可以使用:const int *A;作为传入参数,其实开始和结束也没必要,因为已经固定N这个宏,;其次返回值也可以返回int* 直接返回这个数组会更好,,这样节省资源,可以用指针或者数组接收即可。。
/**/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;
}
选择排序和冒泡排序算法
//其实和上面的一样,可以用const int *A;做参,,,返回值int *;
//选择排序算法
/**/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;
}
当你看到自己以前的代码屎啦啦的屎的时候,说明你进步了,,
本次总结到此结束,,