#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