alexp11.c

来自「1、 字符串由随机产生的1~16位的字母组成」· C语言 代码 · 共 202 行

C
202
字号
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<windows.h>
#include<math.h>
/*------------------------------------------------------------*/
void INSERTSORT(char**str1,int length)
{                                      //插入排序
   int i,j;
   char*key;
   for(i=2;i<length+1;i++)
   {
	   key=str1[i];
	   j=i-1;
	   while((j>0)&&((strcmp(str1[j],key)>0)))
	   {
		   
		   str1[j+1]=str1[j];
		   j--;
	   }
	   str1[j+1]=key;
   }
}
/*------------------------------------------------------------*/
void BUBBLESORT(char** str1,int length)
{                                   //冒泡排序
   int i,j;
   char *temp;
   for(i=1;i<length+1;i++)
   {
	   for(j=1;j<length+1-i;j++)
	   {
		   if(strcmp(str1[j],str1[j+1])>0)
		   {
			   temp=str1[j];
			   str1[j]=str1[j+1];
			   str1[j+1]=temp;
		   }
	   }
   }
}        
/*------------------------------------------------------------*/
void MAXHEAP(char** str,int m,int length) 
{                               //最大化堆
	char *temp;
	int largest;
	if((2*m<length+1)&&(strcmp(str[2*m],str[m])>0)) largest=2*m;
	else largest=m;
	if((2*m+1<length+1)&&(strcmp(str[2*m+1],str[largest])>0)) largest=2*m+1;
	if(largest!=m)
	{
		temp=str[largest];
		str[largest]=str[m];
		str[m]=temp;
		MAXHEAP(str,largest,length);
	}
}
/*------------------------------------------------------------*/
void BUILDMAXHEAP(char** str,int length)
{                               //建最大堆
	int m;
	for(m=(int)length/2;m>0;m--)MAXHEAP(str,m,length);
}
/*------------------------------------------------------------*/
void HEAPSORT(char** str,int length)
{                               //堆排序
	int i;
	char *temp;
	BUILDMAXHEAP(str,length);
	for (i=length;i>1;i--)
	{
		temp=str[1];
		str[1]=str[i];
		str[i]=temp;
		MAXHEAP(str,1,i-1);
	}
}
/*------------------------------------------------------------*/
void MERGE(char** str,int p,int q,int r)
{                               //归并算法
	int m,n,i,j,k;
	char **lstr,**rstr;
	m=q-p+1;
	n=r-q;
	lstr=(char**)malloc((m+2)*sizeof(char*));
	rstr=(char**)malloc((n+2)*sizeof(char*));
	for(i=1;i<m+1;i++)lstr[i]=str[p+i-1];
	for(j=1;j<n+1;j++)rstr[j]=str[q+j];
	lstr[m+1]="{";
	rstr[m+1]="{";
	i=1;j=1;
	for(k=p;k<r+1;k++)
	{
		if(strcmp(lstr[i],rstr[j])>0)
		{
			str[k]=rstr[j];
			j++;
		}
		else
		{
			str[k]=lstr[i];
			i++;
		}
	}
}
/*------------------------------------------------------------*/
void MERGESORT(char** str,int p,int r)
{                                 //归并排序
	int q;
	if(p<r)
	{
		q=(int)floor((p+r)/2);
		MERGESORT(str,p,q);
		MERGESORT(str,q+1,r);
		MERGE(str,p,q,r);
	}
}
/*------------------------------------------------------------*/
int PARTITION(char** str,int p,int r)
{                                 //快排划分
	char *x,*temp;
	int i,j;
	x=str[r];
	i=p-1;
	for(j=p;j<r;j++)
	{
		if((strcmp(x,str[j])>0)||(strcmp(x,str[j])==0))
		{
			i++;
			temp=str[j];
			str[j]=str[i];
			str[i]=temp;
		}
	}
	temp=str[j];
	str[j]=str[i+1];
	str[i+1]=temp;
	return i+1;
}
/*------------------------------------------------------------*/
void QUICKSORT(char **str,int p,int r)
{                                   //快速排序
	if(p<r)
	{
		int q;
		q=PARTITION(str,p,r);
		QUICKSORT(str,p,q-1);
		QUICKSORT(str,q+1,r);
	}
}
/*------------------------------------------------------------*/
main()
{   
	int i,j,lenw,lenl,a;
	char** str;
	char* str1;
	LARGE_INTEGER time1;
    LONGLONG begin,end;
	printf("请输入2的指数次:");
	scanf("%d",&a);
	printf("\n");
    lenw=(int)pow(2,a);
	str=(char**)malloc((lenw+1)*sizeof(char*));
	srand(time(NULL));
    for(i=1;i<lenw+1;i++)
	{
	    lenl=rand()%16+1;
		str1=(char*)malloc((lenl+1)*sizeof(char));
		for(j=0;j<lenl;j++)str1[j]=(char)((rand()%26)+97);
		str1[j]='\0';
		str[i]=str1;
	}
	printf("1、插入排序;\n2、冒泡排序;\n3、堆排序;\n4、归并排序;\n5、快速排序;\n请选择排序算法的种类:");
	scanf("%d",&a);
	printf("\n");
	QueryPerformanceCounter(&time1);
    begin=time1.QuadPart;
	switch(a)
	{
    case 1:INSERTSORT(str,lenw);break;
	case 2:BUBBLESORT(str,lenw);break;
	case 3:HEAPSORT(str,lenw);break;
	case 4:MERGESORT(str,1,lenw);break;
	case 5:QUICKSORT(str,1,lenw);break;
	default:printf("\nERROR\n");
	}
    QueryPerformanceCounter(&time1);
    end=time1.QuadPart;
//	for(i=1;i<lenw+1;i++)printf("%s\n",str[i]);
	//printf("ok\n");
	printf("程序运行的时间为%e ms\n",(double)(end-begin));
}
/*LARGE_INTEGER time1;
LONGLONG begin,end;
QueryPerformanceCounter(&time1);
begin=time1.QuadPart;
INSERT_SORT(integ1,n);
QueryPerformanceCounter(&time1);
end=time1.QuadPart;
cout<<"the RUNNINGTIME of INSERT_SORT"<<"  "<<(double)(end-begin)<<endl;)*/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?