【问题标题】:Simple Bubble sort program. It works flawlessly about 85% of times but in some cases it doesn't sort the list简单的冒泡排序程序。它在大约 85% 的情况下都能完美运行,但在某些情况下它不会对列表进行排序
【发布时间】:2021-04-07 15:10:27
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

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

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

    // Sorting the array
    for (outer = 0; outer < 9; outer++) {
        didSwap = 0;

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

        if (didSwap == 0) {
            break;
        }
    }

    printf("\n\nHere is the list after sorting:\n");
    for (ctr = 0; ctr < 10; ctr++) {
        printf("%3d", nums[ctr]);
    }

    printf("\n");

    return 0;
}

有时它不能正确地对列表进行排序,有时甚至根本不能排序。 Screenshot of error

【问题讨论】:

标签: c random bubble-sort


【解决方案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;
    }

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

    // bubble Sorting the array
    for (outer = 0; outer < 9; outer++) {
        didSwap = 0;
        for (inner = 0; inner < 9-outer; inner++) {
            //repeatedly swapping the adjacent elements if they are in wrong order
            if (nums[inner] > nums[inner+1]) {
                temp = nums[inner];
                nums[inner] = nums[inner+1];
                nums[inner+1] = temp;
                didSwap = 1;
            }
        }

        if (didSwap == 0) {
            break;
        }
    }

    printf("\n\nHere is the list after sorting:\n");
    for (ctr = 0; ctr < 10; ctr++) {
        printf("%3d", nums[ctr]);
    }
    printf("\n");

    return 0;
}

【讨论】:

  • 实际上我正在学习的书(Greg Perry 的绝对初学者 C 指南)在冒泡排序的标签下给出了这个选择排序示例,所以我很困惑。顺便说一句,如果代码不正确,为什么 85% 的时间都在排序?
  • 您的代码适用于一组特定的输入,它是我们出售的用于选择排序的 worg 代码。在这里阅读选择排序:geeksforgeeks.org/java-program-for-selection-sort
  • 如果你是 C 初学者,我会推荐这个博客:geeksforgeeks.org/c-programming-language
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-09
  • 1970-01-01
  • 2023-03-19
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
相关资源
最近更新 更多