📄 排序切换.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 + -