c - "inner"和 "outer"在此冒泡排序代码中如何工作?

标签 c algorithm sorting nested-loops bubble-sort

我正在尝试学习 C 语言书中的冒泡排序算法。我似乎无法理解下面的代码中 int outerint inner 是如何链接的nums 数组的哪个元素。比如 inner 如何变成 nums[0]outer 变成 nums[1] (如果我是对的), 然后通过循环进行?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int ctr, inner, outer, didSwap, temp;
    int nums[10];
    time_t t;

    srand(time(&t));

    for (ctr = 0; ctr < 10; ctr++)
    {
        nums[ctr] = (rand() % 99) + 1;
    }

    puts("\n Here is the list before the sort: ");
    for (ctr = 0; ctr < 10; ctr++)
    {
        printf("%i\n", nums[ctr]);
    }

    for (outer = 0; outer < 9; outer++)
    {
        didSwap = 0;
        for (inner = outer; inner < 10; inner++)
        {
            if (nums[inner] < nums[outer])
            {
                temp = nums[inner];
                nums[inner] = nums[outer];
                nums[outer] = temp;
                didSwap = 1;
            }
        }
        if (didSwap == 0)
        {
            break;
        }
    }

    puts("\n Here is the list after the sort: ");
    for ( ctr = 0; ctr < 10; ctr++)
    {
        printf("%i\n", nums[ctr]);
    }

    return 0;
}

最佳答案

inner 永远不会变成 nums[0]innerouter是数组索引,所以当inner0时,nums[inner]nums[0]

执行比较和交换的代码从不使用 innerouter,它使用 nums[inner] nums[外部].

        if (nums[inner] < nums[outer])
        {
            temp = nums[inner];
            nums[inner] = nums[outer];
            nums[outer] = temp;
            didSwap = 1;
        }

关于c - "inner"和 "outer"在此冒泡排序代码中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72651733/

相关文章:

c++ - 组合算法

c - 本身具有依赖性的静态库上的 AC_SEARCH_LIBS?

查找子序列序列的算法

c++ - 桶排序和计数排序的场景

c - 我是否需要为多线程 C 代码编写显式内存屏障?

algorithm - 这段代码的复杂性是什么,它的嵌套 for 循环重复地使它的计数器加倍?

c# - Project Euler 1 :Find the sum of all the multiples of 3 or 5 below 1000, 适用于 10 个数字,但不适用于 1000 个数字

python - Google App Engine NDB 排序丢失实体

arrays - 合并排序如何处理长度为 N 的数组?

c - 反对 free_if_heap(void *ptr)?