c - 尝试理解冒泡排序函数

标签 c algorithm for-loop bubble-sort

我对 C 和一般编程相当陌生,我对以下冒泡排序函数中的循环有疑问:

    void sort(int values[], int n);
    {
        int c, d, t;

        for (c = 0; c < (n - 1); c++)
        {
            for (d = 0; d < c - n - 1; d++)
            {
                if (values[d] > values[d + 1])
                {
                    t = values[d];
                    values[d] = values[d + 1];
                    values[d + 1] = t;
                }
            }
        }
    }

我特别想理解的部分是第二个 for 循环:

    for (d = 0; d < c - n - 1; d++)

据我所知,该函数每次都会迭代数组,并排比较值,直到最后一个排序的元素,并将最大的元素冒泡到数组的末尾;然而,我似乎无法理解以下含义:

    while d < c - n - 1;

以及它是如何翻译的。当我在脑海中发挥这个作用时,我想象在第一次循环时,d < c - n - 1 等于 0 < 0 - 10 - 1。在我看来,因为 c 总是小于n - 1,从 c 中减去 n - 1 将始终得到小于 0 的值,并且 d 永远不会小于 0,因此永远不应该执行。我知道我只是看错了,当答案出现时,我可能会感到“呃”,但这让我很困扰。

如果我将第一个 for 循环放入单词中,它会说:当 c 小于数组的长度时,执行该循环的内容,然后递增 c。有人可以用类似的方式将第二个 for 循环放入单词中,解释 d < c - n - 1 的含义吗?

最佳答案

请尝试使用此代码。

#include<stdio.h>

void sort(int values[], int n)
{
int c,d,t=n;
//if we have n elements then outer loop must iterate for n times.
for(c=0;c<n;c++)
{
    /*after every complete iteration we get a
    sorted element in last position, next iteration
     will be one less, so we assigned value of n into t
     and we will decrease it by 1 after every internal complete iteration.
     */
     for(d=0;d<t-1;d++)
        {
          if(values[d]>values[d+1])
            {
               int temp;
               temp = values[d+1];
               values[d+1] = values[d];
               values[d] = temp;
            }
        }
    //decrease the test cases in next iteration,
    //we already have last element sorted.
    t--;
  }
}
int main()
{
  int i;
  int values[]={24,12,2,4,6};
  sort(values, 5);

   for(i=0; i<5; i++)
     {
        printf("%d\n",values[i]);
     }

return 0;
}

根据您的需要进行更改。

关于c - 尝试理解冒泡排序函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44612591/

相关文章:

c - 如何制作字符的位掩码?

algorithm - 如何应对 Vertical Sticks 挑战?

algorithm - 如何将 N 个数字分配到最小化某些目标函数的 M 包中?

python - 使用字典值过滤数据帧,同时将字典键分配给匹配的行?

c - 将指针传递给字符串指针数组

sql - 无法从 C 连接到数据库

c - 在 C 中使用 int 值初始化 double 组

algorithm - 实现 Harris 角点检测器

c - for循环计数器中的数组下标运算符

android for循环与字符串[]数组