Попытка реализовать простую функцию пузырьковой сортировки в списке самопровозглашенных массивов

#c #function #bubble-sort #cs50

#c #функция #пузырьковая сортировка #cs50

Вопрос:

Новичок пытается создать массивы, а затем отсортировать их с помощью функции с именем «sort», которую я создал в нижней части кода, используя пузырьковую сортировку..

Я почти уверен, что часть печати в порядке, только те функции, с которыми у меня возникли проблемы, может кто-нибудь помочь новичку, пожалуйста ?..

 #include <stdio.h>
#include <cs50.h>

void sort(int arrayRack[], int NumberOfArrayElements);

int main(void)

{
//variable declarations
int NumberOfArrayElements = 0;


//Get number of arrays
printf("number of arrays you'd like?n");
NumberOfArrayElements = GetInt();

//variable array declaration
int arrayRack[NumberOfArrayElements];


//Get number for each int
for(int i = 0; i < NumberOfArrayElements; i  )
    {
        printf("give me an int for the %i th arrayn", i   1);
        arrayRack[i] = GetInt();
    }

//print what is currently in the arrayRack
for(int j = 0; j < NumberOfArrayElements; j  )
    printf("{%i}<-- number in %i-th array (unsorted)n", arrayRack[j], j   1);



for(int i = 0; i < NumberOfArrayElements; i  )
    {
        sort(amp;arrayRack[i], NumberOfArrayElements);
        printf("{%i}<-- number in %i-th array (sorted)n", arrayRack[i], i   1);

    }
    return 0;
}


//this is the funciton, like sort(haystack, size);
void sort(int arrayRack[], int NumberOfArrayElements)
{
//declare variable
int swap = 0;
        for(int k = 0; k < NumberOfArrayElements; k  )
        {
            //if [1] is higher, swap with [2]
            if(arrayRack[k] > arrayRack[k   1])
            {
                swap = arrayRack[k];
                arrayRack[k] = arrayRack[k   1];
                arrayRack[k   1] = swap;
            }
        }

}
  

Ответ №1:

Вы передаете указатель на элемент amp;arrayRack[i] , но в параметрах сортировки вы объявили первый параметр как массив, поэтому он не соответствует. Вы могли бы просто написать:

В основном:

 sort(arrayRack, NumberOfArrayElements);
for(int i = 0; i < NumberOfArrayElements; i  )
    {
        printf("{%i}<-- number in %i-th array (sorted)n", arrayRack[i], i   1);

    }
  

И в функции сортировки:

 void sort(int arrayRack[], int NumberOfArrayElements)
{
//declare variable
int swap = 0;
        for(int k = 0; k < NumberOfArrayElements-1; k  )
        {

           for(int j=0; j<NumberOfArrayElements-1-k;j  )

            if(arrayRack[j] > arrayRack[j   1])
            {
                swap = arrayRack[j];
                arrayRack[j] = arrayRack[j   1];
                arrayRack[j   1] = swap;
            }
        }

}
  

Также я бы предложил scanf("%d",amp;NumberOfArrayElements); вместо NumberOfArrayElements = GetInt(); и scanf("%d",amp;arrayRack[i]); вместо arrayRack[i] = GetInt();

Пример:

  number of arrays you'd like?
    5
    give me an int for the 1 th array
    5 
    give me an int for the 2 th array
    7
    give me an int for the 3 th array
    1
    give me an int for the 4 th array
    8
    give me an int for the 5 th array
    3
    {5}<-- number in 1-th array (unsorted)
    {7}<-- number in 2-th array (unsorted)
    {1}<-- number in 3-th array (unsorted)
    {8}<-- number in 4-th array (unsorted)
    {3}<-- number in 5-th array (unsorted)
    {1}<-- number in 1-th array (sorted)
    {3}<-- number in 2-th array (sorted)
    {5}<-- number in 3-th array (sorted)
    {7}<-- number in 4-th array (sorted)
    {8}<-- number in 5-th array (sorted)
  

Комментарии:

1. хм .. Можете ли вы помочь мне понять, почему нам нужны два цикла for вместо одного, в функции сортировки, пожалуйста?

2. Это все о реализации bubblesort, bubblesort нуждается в двух циклах и (вот почему он имеет сложность O (n ^ 2)), основная идея, лежащая в основе 2 циклов, заключается в том, что нам нужно сравнить со всеми другими элементами, поэтому element1 будет сравниваться со всеми n-1 элементами, элемент2 будут ли все n-2 элемента (уже сравненные с элементом 1 из предыдущего шага), элемент n будет сравниваться с 0 элементами (это то, что осталось), так что всего шагов сравнения: n-1 n-2 … 1 0 = O (n ^ 2) (2 цикла).

3. Вы можете проверить алгоритм сортировки пузырьков здесь: quiz.geeksforgeeks.org/bubble-sort