(仅限12.22急)帮我在本来的代码上改一下,不用排序

题目:输入N个数找到前k个小的数,并全部从小到大输出(有重复数字)比如我输入1122244567这些数,求前三小,则输出:1122244
#include<stdio.h>
int main()
{
int i=1,j=1,k,min=1,left,N,t,q;
int a[100];
int c[100];
int n[100];
printf("所需输入数字的个数:\n");
scanf("%d",&N);
printf("请输入各个数:\n");
for(i=1;i<=N;i++)
scanf("%d",&a[i]);
printf("请输入需要找几个最小数:\n");
scanf("%d",&k);
for(i=1;i<=k;i++)
n[i]=0;
for(i=1;i<=N;i++)
{
if(a[i]<a[min])
{
min=i;
n[k]=1;
}
if(a[i]==a[min])
n[k]++;
}
c[k]=a[min];
t=min;
q=k;
k--;
while(k!=0)
{
left=t;
for(i=1;i<=N;i++)
{
if(a[i]>a[left])
break;
}
t=i;
for(i=1;i<=N;i++)
{
if(a[i]<a[t] && a[i]>a[left])
{
t=i;
n[k]=1;
}
if(a[i]==a[t])
n[k]++;
}
c[k]=a[t];
k--;
}
for(i=1;i<=q;i++)
{
for(j=1;j<=n[i];j++)
printf("%d",c[q-i+1]);
}
printf("\n");
return 0;
}

img

img


#include <stdio.h>
int main()
{
    int i = 1, j = 1, k, min = 1, left, N, t, q;
    int a[100];
    int c[100];
    int n[100];
    printf("所需输入数字的个数:\n");
    scanf("%d", &N);
    printf("请输入各个数:\n");
    for (i = 1; i <= N; i++)
        scanf("%d", &a[i]);
    printf("请输入需要找几个最小数:\n");
    scanf("%d", &k);
    for (i = 1; i <= k; i++)
        n[i] = 0;
    for (i = 1; i <= N; i++)
    {
        if (a[i] < a[min])
        {
            min = i;
            n[k] = 1;
        }
        else if (a[i] == a[min])////这里改成else if
            n[k]++;
    }
    c[k] = a[min];
    t = min;
    q = k;
    k--;
    while (k != 0)
    {
        left = t;
        for (i = 1; i <= N; i++)
        {
            if (a[i] > a[left])
                break;
        }
        t = i;
        for (i = 1; i <= N; i++)
        {
            if (a[i] < a[t] && a[i] > a[left])
            {
                t = i;
                n[k] = 1;
            }
            else if (a[i] == a[t])//这里改成else if
                n[k]++;
        }
        c[k] = a[t];
        k--;
    }

    for (i = 1; i <= q; i++)
    {
        for (j = 1; j <= n[q - i + 1]; j++)//这里改成n[q - i + 1]
            printf("%d", c[q - i + 1]);
    }
    printf("\n");
    return 0;
}

img


这样吗

建议排序后,直接打印前n个数
这是先排序版的

#include<stdio.h>
int main()
{
    int i=1,j=1,k,min=1,left,N,t,q;
    int a[100];
    int c[100];
    int n[100];
    printf("所需输入数字的个数:\n");
    scanf("%d",&N);
    printf("请输入各个数:\n");
    for(j=0; j<N; j++)
        scanf("%d",&a[j]);
    printf("请输入需要找几个最小数:\n");
    scanf("%d",&k);
    t=N-1;
    while(t)//进行n-1次排序
    {
        j=0;
        while(j<t)//一次排序判断n-1次,最多交换n-1次
        {

            if(a[j]>a[j+1])
            {
                int tem=a[j];
                a[j]=a[j+1];
                a[j+1]=tem;
                flag=1;
            }
            j++;
        }
        --t;
    }
    for(j=0; j<k; j++)
    {
        printf("%d",a[j]);
    }
    printf("\n");
    return 0;
}