【问题标题】:breaking the bubble sort loop打破冒泡排序循环
【发布时间】:2021-08-04 20:13:42
【问题描述】:

在我可以将浮点数放入数组之后。我决定做一个冒泡排序。并在发生交换时显示每个结果

#include <stdio.h>

void print_array(float *number, int m){
    int i;
    for (i=0;i<m;i++){
        printf("%.2f ",number[i]);
    }
}
void swap(float *a, float *b)
{
    float temp = *a;
    *a = *b;
    *b = temp;
}
int main()
{
    unsigned int i,j,m;
    int flag = 0;
    printf("Input Size of Array : ");
    scanf("%d",&m);
    float number[m];
    for(i=0;i<m;i++){
        printf("Number %d : ",i+1);
        scanf("%f",&number[i]);
    }
    printf("\nBefore Sort => ");
    for(i=0;i<m;i++){
        printf("%.2f ",number[i]);
    }
    printf("\n\n");
    for(i=0;i<m;i++)
    {
        for(j=0;j<m-i-1;j++)
        {
            if(number[j] < number[j+1])
            {
                swap(&number[j],&number[j+1]);
                flag = 1;
            }
        }
        if(flag==0)
        {
            break;
        }
        printf("Sort # %d => ",i+1);
        print_array(number,m);
        printf("\n");
    }
    printf("\n--- Sort End ---");
}

我对其进行了测试,发现 flag==00 并没有停止循环。即使数组中没有更多的交换。

完成排序后如何中断循环?

【问题讨论】:

  • “我测试一下” 怎么样?什么输入?什么预期输出?什么实际输出?请创建一个minimal reproducible example 来证明您的问题。理想情况下避免需要用户输入。
  • 你需要在循环的顶部设置标志为0。

标签: c bubble-sort


【解决方案1】:

在第一个循环中初始化标志值。

int flag;
for(i=0; i<m; i++)
{
    flag = 0;
    for(j=0; j<m-i-1; j++)
    {
        if(number[j] < number[j+1])
        {
            swap(&number[j],&number[j+1]);
            flag = 1;
        }
    }
    if(flag==0)
    {
        break;
    }
    printf("Sort # %d => ",i+1);
    print_array(number,m);
    printf("\n");
}

对于每次迭代,如果没有交换操作,您希望停止。

因此,在运行循环进行交换之前,您必须启动标志值。

【讨论】:

  • 感谢您的回答!
  • 欢迎...快乐编码:)
猜你喜欢
  • 1970-01-01
  • 2021-01-29
  • 2017-01-25
  • 2020-05-30
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 2020-07-14
  • 2017-06-29
相关资源
最近更新 更多