⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 排序切换.cpp

📁 从文件读入20组数据
💻 CPP
字号:
#include<stdio.h>
int p[20];
int num=0;
int flag=0;

void show()
{
	int i;
	for(i=0;i<20;i++)
	{
	if(i==flag)
	{
		printf("<%d>",p[i]);
	}
	else
	{
		printf("%d ",p[i]);
	}
	}
	printf("\n");
}
void show2()
{
	int i;
	for(i=0;i<20;i++)
	{
		printf("%d ",p[i]);
	}
	printf("\n");
}
static int split(int m,int n)
{
	int i,j,k,u;
	int t;
	i=m;j=n;
	k=(i+j)/2;
	if(((p[i]>=p[j])&&(p[j]>=p[k]))||((p[i]<=p[j])&&(p[j]<=p[k])))u=j;
	else if (((p[i]>=p[k])&&(p[k]>=p[j]))||((p[i]<=p[k])&&(p[j]>=p[k])))u=k;
	else u=i;
	t=p[u];
	p[u]=p[i];
	while(i!=j)
	{
		while((i<j)&&(p[j]>=t))
	    j=j-1;
	    if(i<j)
		{
		p[i]=p[j];i=i+1;
		}
	    while((i<j)&&(p[i]<=t))
		i=i+1;
	    if(i<j)
		{
		p[j]=p[i];j=j-1;
		}
	}
	p[i]=t;
	flag=i;
	num++;
	printf("第%d次分割:",num);
	printf("\n");
	show();
	printf("\n");
	return(i);
}

void insort(int n)
{
	int k,j;
	int t;
	for(j=1;j<n;j++)
	{
		t=p[j];
	    k=j-1;
	while((k>=0)&&(p[k]>t))
	{
		p[k+1]=p[k];k=k-1;
	}
	p[k+1]=t;
	}
	printf("\n");
	printf("存在小于3的分组,故转入插入排序:\n");
		show2(); 
		printf("\n");
	return;

}

void qck(int m,int n)
{
	int i;
	if(n-m>=3)
	{
		i=split(m,n);
		qck(m,i-1);

		qck(i+1,n);
	}	
	else
	 insort(n);
	return;
}

void main() 
{
int i;
FILE *fin,*fout;
fin=fopen("in.txt","r");
fout=fopen("out.txt","w"); 
for(i=0;i<20;i++)fscanf(fin,"%d",&p[i]);
printf("****************************排序算法实验一:排序切换****************************\n");
qck(0,19);
printf("最终结果:\n");
show2();
for(i=0;i<20;i++)fprintf(fout,"%d ",p[i]);
fclose(fin);
fclose(fout);
}

⌨️ 快捷键说明

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