自动生成随机数组及排序

自动生成随机数组及排序

话不多说,代码奉上,愿今后的我可以看到之前代码的卓略表演:

代码

#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;
}

当你看到自己以前的代码屎啦啦的屎的时候,说明你进步了,,
本次总结到此结束,,

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值