Как сохранить несортированный массив в C после сортировки

#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])
        }
    }
}