整形数组排序算法小型的一个课程设计 C语言_结构体

还是同样的,自己学习,自己分析,加油!!
#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值