#include<stdio.h>
void sort(int a,int arr[])//数组冒泡排序
{
for (int i=0;i<a;i++)
{
for (int j=0;j<a-i-1;j++)
{
if (arr[j]<arr[j-1])
{
int temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
}
}
}
void cut(int arr[],int a,int num)//二分法查找排序
{
int m=0,n=a-1;
int middle;
while(m<=n)
{
middle=(m+n)/2;
if (arr[middle]>num)
n=middle-1;
if (arr[middle]<num)
m=middle+1;
}
while (arr[m]<num)
{
m++;
}
//进行到这一步的结果是arr[m]比num大或者相等
if (arr[m]!=num)
{
for (int i=a-1;i>=m;i--)
{
arr[i]=arr[i-1];
}
arr[m]=num;
}
}
int main(void)
{
int N,k,num;
printf("请输入总数N:");
scanf("%d",&N);
k=N/2;
int a[k];
printf("请不重复输入N/2个数:");
for (int i=0;i<k;i++)
{
scanf("%d",&a[i]);
}
sort(k,a);//对前k个数进行排序
for (int i=k;i<N;i++)
{
printf("请输入剩下的数:");
scanf("%d",&num);
cut(a,k,num);//对输入新数据的数组进行重排序
for (int i=0;i<k;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
return 0;
}
void sort(int a,int arr[])//数组冒泡排序
{
for (int i=0;i<a;i++)
{
for (int j=0;j<a-i-1;j++)
{
if (arr[j]<arr[j-1])
{
int temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
}
}
}
void cut(int arr[],int a,int num)//二分法查找排序
{
int m=0,n=a-1;
int middle;
while(m<=n)
{
middle=(m+n)/2;
if (arr[middle]>num)
n=middle-1;
if (arr[middle]<num)
m=middle+1;
}
while (arr[m]<num)
{
m++;
}
//进行到这一步的结果是arr[m]比num大或者相等
if (arr[m]!=num)
{
for (int i=a-1;i>=m;i--)
{
arr[i]=arr[i-1];
}
arr[m]=num;
}
}
int main(void)
{
int N,k,num;
printf("请输入总数N:");
scanf("%d",&N);
k=N/2;
int a[k];
printf("请不重复输入N/2个数:");
for (int i=0;i<k;i++)
{
scanf("%d",&a[i]);
}
sort(k,a);//对前k个数进行排序
for (int i=k;i<N;i++)
{
printf("请输入剩下的数:");
scanf("%d",&num);
cut(a,k,num);//对输入新数据的数组进行重排序
for (int i=0;i<k;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
return 0;
}