C中嵌套的for循环中的条件将不起作用

时间:2019-06-25 16:54:16

标签: c for-loop if-statement

我是C语言的新手,我正在练习for循环和指针。 在本练习中,我尝试编写一个对数组元素进行排序的函数。代码的第一部分(我在其中输入元素)正在工作,但是下面的所有内容使我很难受。我不明白问题出在if / else语句中还是循环结构中的其他地方。最后一个循环也不起作用(我只希望它循环遍历已排序的数组并打印元素,就像我之前对未排序的数组一样。

希望我能得到一些帮助,如果您还有其他需要注意的地方...

谢谢。

我尝试检查定义循环的方式是否正确,是否放置了所有正确的值以及对数组进行排序的基本“想法”是否正确。

void sort_array_elements()
{
int x, i, j, k, temp;
printf("\n input the number of elements to store in the array: ");
scanf_s("%d", &x);

int arrnum[30];
ptr_int = &x;
printf("input %d elements in the array: \n", x);
for (i = 0; i < x; i++)
{
    scanf_s("%d\n", &arrnum[i]);
}

printf("the elements in the array before sorting: \n");
for (i = 0; i < x; i++)
{
    printf("element %d: %d\n", i, arrnum[i]);
}


for (i = 0; i < x; i++)
{
    for (j = 1; j < x; j++)
    {
        if (arrnum[i] > arrnum[j])
        {
            temp = arrnum[i];
            arrnum[i] = arrnum[j];
            arrnum[j] = temp;


        }
        else if (arrnum[i] == arrnum[j])
        {
            for (k = arrnum[i + 1]; k < x; k++)
            {
                if (arrnum[k] != arrnum[j])
                {
                    temp = arrnum[k];
                    arrnum[k] = arrnum[j];
                    arrnum[j] = temp;
                    break;
                }
            }
        }


    }

}

printf("the elements in the array after sorting: \n");

for (i = 0; i < x; i++)
{
    printf("element %d: %d\n", i, arrnum[i]);
}

}

1 个答案:

答案 0 :(得分:0)

我不确定您的排序算法中的elseif语句。该代码还可以通过不重复排序元素而仅将最小的元素交换到i的位置中来减少运行时间。还可以考虑使用qsort内置函数对数组进行排序!我怀疑您的排序算法对数组做了奇怪的事情,这就是为什么打印排序后的数组的循环无法正常工作的原因。另外,您永远不会使用ptr_int或指针(我想数组是指针)。

`

for(int i = 0; i<x; i++)
{
    for(int j = i; j<x; j++)
    {
        if(arr[j] < arr[i])
        {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
 }

`

相关问题