#arrays #c #sorting
#массивы #c #сортировка
Вопрос:
Как правило, я пытаюсь получить время выполнения алгоритмов сортировки в C, используя случайно сгенерированный массив. Однако, я думаю, что после первой сортировки моя функция уже сортирует отсортированный массив, а не случайно сгенерированный массив.
Вот примеры моего кода: для создания и печати моего массива
void generator(int A[], int n){
int i;
for(i = 0; i < n 1; i ){
A[i] = rand()%n 1;
}
}
void printer(int A[], int n){
for (int i = 0; i < n; i)
{
printf("%d ", A[i]);
}
printf("nn");
}
и моя сортировка:
void bubble(int A[], int n)
int i,j;
for (i = 0; i < n-1; i ){
for(j = 0; j < n-i-1; j ){
if(A[j] > A[j 1]){
swap(amp;A[j], amp;A[j 1]);
}
}
теперь моя основная функция выглядит так:
int main(){
int n[] = {5} //this is an example array size, this could be extended
for(int i = 0; i < 1; i ){
int A[n[i]]; //this is were i initialize my array with the size of index i
generator(A[n[i]], n);
for(int j = 0; j < 10; j ){ //run sort 10x
//printer(A, n);
bubble(A,n);
}
}
Я использую указанное выше значение принтера для проверки массива, но, основываясь на этом коде, при первом запуске мой алгоритм сортировки запускает случайно сгенерированный массив, однако при 2-10-м запуске он сортирует уже сгенерированный массив.
Комментарии:
1. Создайте копию массива и отсортируйте копию.
2.
generator(A[n[i]], n);
должно бытьgenerator(A, n);
3.
i < n 1
должно бытьi < n
Ответ №1:
Создайте копию массива и отсортируйте его.
Кроме того, n
аргумент для всех других функций должен быть n[i]
.
int main(void){
int n[] = {5} //this is an example array size, this could be extended
for(int i = 0; i < 1; i ){
int A[n[i]]; //this is were i initialize my array with the size of index i
generator(A[n[i]], n[i]);
for(int j = 0; j < 10; j ){ //run sort 10x
int A_copy[n[i]];
memcpy(A_copy, A, sizeof(A));
bubble(A_copy, n[i]);
printer(A_copy, n[i])
}
}
}