气泡排序不排序

Bubble Sort not sorting

本文关键字:排序 气泡      更新时间:2023-10-16

我正在尝试实现气泡排序,但最终,列表根本不排序。

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

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: %in", swaps);
                //Printing sorted list
                for(int m = 0; m < n; m++)
                {
                    printf("Sorted %i n", values[m]);
                }
            } 
            if(swaps == 0)
            {
                return;  
            }
            k++; 
        }
    }
}

未分类列表是:

Unsorted 34 
Unsorted 17 
Unsorted 51 
Unsorted 12 
Unsorted 33 
Unsorted 56 
Unsorted 11 
Unsorted 31 
Unsorted 16 
Unsorted 55 

和排序的列表出现了:

Sorted 17 
Sorted 34 
Sorted 12 
Sorted 33 
Sorted 51 
Sorted 56 
Sorted 11 
Sorted 31 
Sorted 16 
Sorted 55 

ps:交换功能正在工作,我已经对其进行了测试。

我在您的代码中看到的主要问题在

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

您在if语句中打印所有值,这是错误的。而且,如果不互换第一个值,则该函数将在不做任何事情的情况下返回。

可能的解决方案将是

  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: %in", swaps);
  if(swaps == 0)
  {
     return;  
  }
  //Printing sorted list
  for(int m = 0; m < n; m++)
  {
      printf("Sorted %i n", values[m]);
  }

提示如果swaps == 0,此循环仍然不起作用。考虑集{17, 40, 39, 41}。第一个元素没有发生掉期,但仍未分类。

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

soln

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";
            }

,而且如果第一个否小于第二交换变量,则定义为零,并且程序退出