无法将2个阵列排序在一起然后打印出来。 - C语言

时间:2018-03-06 18:07:33

标签: c arrays sorting

我遇到创建程序的问题,该程序将首先对每个数组进行排序,然后将它们放在一起并对它们进行排序。我的程序失败的任何想法? 在输出中,它会创建如下随机数:

4204988
3
4
4
5
5
6
7
7
8

正如您所看到的,有9个已排序的数字,但我不知道它是数组还是已经使用数组排序的数组。除了11之外,应该有20个数字,其中前1个没有任何意义。

void sort(int arr[], int howmany)
    {
        int i, switchh;
        while(1)
        {
            switchh = 0;
            for(i = 0; i < howmany - 1; i++)
            {
                if(arr[i] > arr[i + 1])
                {
                    int switching = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = switching;
                    switchh = 1;
                }
            }
            if(switchh == 0)
                break;
        }
    }
    void sortt(int arrr[], int howmany)
    {
        int i, switchh;
        while(1)
        {
            switchh = 0;
            for(i = 0; i < howmany - 1; i++)
            {
                if(arrr[i] > arrr[i + 1])
                {
                    int switching = arrr[i];
                    arrr[i] = arrr[i + 1];
                    arrr[i + 1] = switching;
                    switchh = 1;
                }
            }
            if(switchh == 0)
                break;
        }
    }

    int main(void)
    {
        srand((unsigned)time(0));
        int howmany = 10;
        int arr[howmany];
        int swichh;
        int arrr[howmany];
        int i=0,j=0;
        for(i = 0; i < howmany; i++)
            arr[i] = rand() % 10 + 1;
            for(i = 0; i < howmany; i++)
            arrr[i] = rand() % 10 + 1;
        sort(arr, howmany);
        sortt(arrr, howmany);
        for( ; ; )
        {
        if (arr[i]>arrr[j])
        {
        printf("%d\n",arr[i]) ;
        i++;
    }
        else
        {
            if (arrr[j]>arr[i])
            {
                printf("%d\n",arrr[j]);
                j++;
            }
        }
        if ((i == howmany) || (j == howmany))
break;

    }
        return 0;
    }

1 个答案:

答案 0 :(得分:2)

首先,您不需要两个sort函数。编写函数的基本目的不是强制重复编写同一组指令。虽然我觉得您需要更多地了解功能,如果您不清楚这一点。

由于howmanyarr中有arrr个元素,因此合并它们循环需要运行2*howmany次。如果你什么都不懂,请告诉我。 :)

 void sort(int arr[], int howmany)
        {
            int i, switchh;
            while(1)
            {
                switchh = 0;
                for(i = 0; i < howmany - 1; i++)
                {
                    if(arr[i] > arr[i + 1])
                    {
                        int switching = arr[i];
                        arr[i] = arr[i + 1];
                        arr[i + 1] = switching;
                        switchh = 1;
                    }
                }
                if(switchh == 0)
                    break;
            }
        }

        int main(void)
        {
            srand((unsigned)time(0));
            int howmany = 10;
            int arr[howmany];
            int swichh;
            int arrr[howmany];
            int i=0,j=0, count=0;
            for(i = 0; i < howmany; i++)
                arr[i] = rand() % 10 + 1;
            for(i = 0; i < howmany; i++)
                arrr[i] = rand() % 10 + 1; //since value of i has changed now
            i=0;
            sort(arr, howmany);
            sort(arrr, howmany);//currently both i and j are zero
            for( count = 0; count < 2*howmany ; count++ )
            {
                if( i > howmany-1)
                {
                    printf("%d\n",arrr[j]);
                    j++;
                } 
                else if( j > howmany-1)
                {
                    printf("%d\n",arr[i]);
                    i++;
                } 
                else if (arr[i]<arrr[j])
                {
                   printf("%d\n",arr[i]) ;
                   i++;
                }
                else
               {
                    printf("%d\n",arrr[j]);
                    j++;
               }
            }
            return 0;
        }