Пузырьковая сортировка в C

Я пытался реализовать алгоритм пузырьковой сортировки для сортировки массива из 10 элементов. Я попытался написать приведенный ниже код, и он не кажется неправильным, но он вообще не сортирует элементы.

Может ли кто-нибудь дать мне руку?

Это код:

`

#include <stdio.h>

#define DIM 10

int main() {

    int arr[DIM] = {1, 5, 6, 8, 7, 9, 3, 2, 4, 10};
    int tmp;

    puts("Original array: ");
    for (int i = 0; i < DIM; i++) {
        printf("%3d", arr[i]);
    }
    
    // Bubble sort
    for (int i = 0; i < DIM - 1; ++i) {
        for (int j = 0; j < DIM - i - 1; ++j) {
            // Compare two elements and swap if first > second
            // Use of tmp variable (temporary)
            if (arr[i] > arr[i + 1]) {
                tmp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = tmp;
            }
        }
    }

    puts("");

    puts("Ascending order arrray: ");
    for (int i = 0; i < DIM; i++) {
        printf("%3d", arr[i]);
    }
    
    puts("");

}

`

Для чего используется индекс «j»?

pmacfarlane 12.12.2022 10:29

Отладчики предназначены для решения подобных проблем. Пройдитесь по коду строка за строкой и наблюдайте за своими переменными на каждом этапе. Продолжайте, пока не найдете шаг, который не делает то, что вы ожидаете.

user694733 12.12.2022 10:40
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
2
72
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Используйте j в теле второго цикла вместо i.`

    // Bubble sort
for (int i = 0; i < DIM - 1; ++i) {
    for (int j = 0; j < DIM - i - 1; ++j) {
        // Compare two elements and swap if first > second
        // Use of tmp variable (temporary)
        if (arr[j] > arr[j + 1]) {
            tmp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = tmp;
        }
    }
}

Во втором цикле вместо j следует использовать i.

if (arr[j] > arr[j + 1]) {
  tmp = arr[j];
  arr[j] = arr[j + 1];
  arr[j + 1] = tmp;
}
#include <stdio.h>

#define DIM 10

int main() {

    int arr[DIM] = {1, 5, 6, 8, 7, 9, 3, 2, 4, 10};
    int tmp;

    puts("Original array: ");
    for (int i = 0; i < DIM; i++) {
        printf("%3d", arr[i]);
    }
    
    // Bubble sort
    for (int i = 0; i < DIM - 1; ++i) {
        for (int j = 0; j < DIM - i - 1; ++j) {
            // Compare two elements and swap if first > second
            // Use of tmp variable (temporary)
            if (arr[j] > arr[j + 1]) {
                tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }

    puts("");

    puts("Ascending order arrray: ");
    for (int i = 0; i < DIM; i++) {
        printf("%d", arr[i]);
    }
    
    puts("");

}

*Изменение: нужно использовать «j» вместо «i» во 2-м операторе цикла for.

Другие вопросы по теме