Bubble Sort в C ++ (или C) с использованием функции - PullRequest
0 голосов
/ 22 марта 2019

Я пытался реализовать пузырьковую сортировку, используя C или C ++, с помощью следующей функции.Я сделал функцию, которая возвращает индекс max, а затем я заменяю его последним элементом для каждой итерации, m.

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

вот пример ввода / вывода

#include<iostream>
#include<stdio.h>
int find_max(int array[50], int len);
int main(int argc, char const *argv[]) {
    int n;
    std::cout << "enter number of values" << '\n';
    std::cin >> n;
    int array[n];
    for (int i=0;i<n;i++)
    {
        printf("Array[%i]= ",i );
        std::cin >>array[i];
        printf("\n" );
    }
    for (int i=0;i<n;i++)
    {
        int m=n-i-1;
        int index = find_max(array,m);
        int temp = array[index];
        array[index]=array[m];
        array[m]=temp;
        printf("%i\n",array[m]);
    }
}
int find_max(int array[50],int len)
{
    int index=0;
    int max = array[0];
    for (int i=0;i<len;i++)
    {
        if (array[i]>= max)
        {
            max = array[i];
            index = i;
        }
    }
    return index;
}

Ответы [ 2 ]

0 голосов
/ 22 марта 2019
array[index]=array[m];
array[m]=temp;
printf("%i\n",array[m]);

Во всех этих строках должно быть m-1, а не m, поскольку m-1 - это индекс последнего элемента в массиве или m элементов.

0 голосов
/ 22 марта 2019

Прежде всего, вы печатаете значение i-го элемента в массиве, который еще не был инициализирован.Поэтому я предлагаю вам поменять местами функцию printf с входным считывателем в первом цикле for в функции main .

Как я вижу во втором цикле forтам, где происходит сортировка, вы меняете самое высокое значение в массиве на последний элемент в массиве.Это должно привести к тому, что самое высокое значение будет в начале массива.Я предлагаю использовать следующую реализацию:

void bubblesort(int array[LENGTH])
{
int i, j;

for (i = 1; i < LENGTH; i++)
{
    for (j = 1; j < LENGTH; j++)
    {
        if (array[j - 1] > array[j])
        {
            int exchange = array[j - 1];
            array[j - 1] = arra[j];
            array[j] = exchange;
        }
    }
}

В вашем коде n на одно значение выше, чем самый высокий индекс, поскольку последний индекс равен n-1.Таким образом, индекс i в начале равен 0, что означает, что первое значение m выходит за пределы.Поэтому вычтите 1 из m .

...