Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 冒泡排序不排序_C++ - Fatal编程技术网

C++ 冒泡排序不排序

C++ 冒泡排序不排序,c++,C++,我试图实现冒泡排序,但最终列表根本没有排序 看起来是这样的,我找不到错误: void sort(int values[], int n) { //Printing unsorted list for(int l = 0; l < n; l++) { printf("Unsorted %i \n", values[l]); } // Implement Bubble sort for(int j = 0; j <= n-

我试图实现冒泡排序,但最终列表根本没有排序

看起来是这样的,我找不到错误:

void sort(int values[], int n)
{
    //Printing unsorted list
    for(int l = 0; l < n; l++)
    {
        printf("Unsorted %i \n", values[l]);
    }

    // Implement Bubble sort
    for(int j = 0; j <= n-1; j++)
    {
        int swaps = 0;
        int k = 0;
        for(int i = 0; i < n - k; i++)
        {
            if(values[i] > values[i+1])
            {
                swap(&values[i], &values[i+1]);
                swaps++;
                printf("swaps: %i\n", swaps);
                //Printing sorted list
                for(int m = 0; m < n; m++)
                {
                    printf("Sorted %i \n", values[m]);
                }
            } 

            if(swaps == 0)
            {
                return;  
            }

            k++; 
        }
    }
}
排序后的列表如下所示:

Sorted 17 
Sorted 34 
Sorted 12 
Sorted 33 
Sorted 51 
Sorted 56 
Sorted 11 
Sorted 31 
Sorted 16 
Sorted 55 
PS:交换功能正在工作,我已经测试过了。

提示
如果
swaps==0
,此循环仍然不起作用。考虑集合<代码> { 17, 40, 39,41 } < /代码>。第一个元素未发生交换,但它仍然未排序。

我看到的代码的主要问题是

    for(int i = 0; i < n - k; i++)
    {
        if(values[i] > values[i+1])
        {
            swap(&values[i], &values[i+1]);
            swaps++;
            printf("swaps: %i\n", swaps);
            //Printing sorted list
            for(int m = 0; m < n; m++)
            {
                printf("Sorted %i \n", values[m]);
            }
        } 
        if(swaps == 0)
        {
           return;  
        }

        k++; 
    }

我认为在第二个循环中存在问题

索恩

int-temp;
对于(int j=0;j值[i+1])
{
温度=数值[i];
值[i]=值[i+1];
数值[i+1]=温度;
交换++;

如果你知道冒泡排序的概念,你可以自己一行一行地浏览函数;错误很容易被发现。有些人只是不愿意帮忙。如果我能自己找到错误,用调试器或者只是查看一下,我就不会发布了here@JoaoTurolla有些人不想工作,因为这样比较容易提问而不是自己调试。问题是-你只有在工作时才学会如何编程,而不是在你从别人那里得到答案时。是的,我在错误的地方打印了。但是,我不明白为什么你把
if(swaps==0){return;}
放在第一个循环(带J的循环)之外.因为我把我的设置在第一个循环的内部和第二个循环的外部work@JoaoTurolla,是的,你是对的,因为如果在使用
j
的for循环的第一次迭代中没有交换,那么就不需要检查它的其余部分。我实际上没有编译它,而是通过查看我看到的问题来编写它(我提到这是一个可能的解决方案,并不意味着它是最有效的)这就是为什么我错过了它。但是现在,我编译了它,并且还喜欢
k
的一个错误,你不需要
k
,它不适用于特殊情况,所以我删除了它。看看更新的答案。
    for(int i = 0; i < n - k; i++)
    {
        if(values[i] > values[i+1])
        {
            swap(&values[i], &values[i+1]);
            swaps++;
            printf("swaps: %i\n", swaps);
            //Printing sorted list
            for(int m = 0; m < n; m++)
            {
                printf("Sorted %i \n", values[m]);
            }
        } 
        if(swaps == 0)
        {
           return;  
        }

        k++; 
    }
  int swaps = 0;
  for(int j = 0; j < n - 1; j++)
  {
    for(int i = 0; i < n - 1 ; i++)
    {
        if(values[i] > values[i+1])
        {
            swap(&values[i], &values[i+1]);
            swaps++;
        }
    }
    if(swaps == 0)
    {
      break;  
    }
  } 
  printf("swaps: %i\n", swaps);
  if(swaps == 0)
  {
     return;  
  }
  //Printing sorted list
  for(int m = 0; m < n; m++)
  {
      printf("Sorted %i \n", values[m]);
  }
int temp;
for(int j = 0; j <= n-1; j++)
{
    int swaps = 0;
    int k = 0;
    for(int i = 0; i < n - j; i++)
    {
        if(values[i] > values[i+1])
        {
            temp=values[i];
            values[i]=values[i+1];
            values[i+1]=temp;
            swaps++;
            cout<<"swaps:"<<swaps<<"\n";

        }




    }
}
for(int m = 0; m < n; m++)
            {
                cout<<"Sorted "<<values[m]<<"\n";
            }