Bubble sort с размером массива - PullRequest
0 голосов
/ 05 апреля 2020

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

// A function to implement bubble sort  
void bubbleSort(int arr[], int n)  
{  
    int i, j;
    bool swapped; 
    int comparisons=0;
    for (i = 0; i < n-1; i++)  {
      swapped = false;
    // Last i elements are already in place  
    for (j = 0; j < n-i-1; j++)
    {
        comparisons++;
        if (arr[j] > arr[j+1])  
            {
                int temp = arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
                swapped = true; 
            }
    }
    if (swapped == false) 
        break; 
    }   
    cout << "Number of comparisons = " << comparisons << endl;
}  

/* Function to print an array */
void printArray(int arr[], int size)  
{  
    int i;  
    for (i = 0; i < size; i++)  
        cout << arr[i] << " ";  
    cout << endl;  
}  

// Driver code  
int main()  
{  
    int arr[] = {1, 2, 3, 4, 5};  
    int n = 5;  
    bubbleSort(arr, n);  
    cout<<"Sorted array: \n";  
    printArray(arr, n);  
}  

, что я не хочу делать.

Я сделал это, но я не знаю, почему это не работает. Я все еще довольно новый с C ++. Могу ли я знать, в чем проблема. Большое вам спасибо.

// A function to implement bubble sort  
void bubbleSort(int arr[], int n)  
{  
    int i, j;
    bool swapped; 
    int comparisons=0;
    for (i = 0; i < n-1; i++)  {
      swapped = false;
    // Last i elements are already in place  
    for (j = 0; j < n-i-1; j++)
    {
        comparisons++;
        if (arr[j] > arr[j+1])  
            {
                int temp = arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
                swapped = true; 
            }
    }
    if (swapped == false) 
        break; 
    }   
    cout << "Number of comparisons = " << comparisons << endl;
}  

/* Function to print an array */
void printArray(int arr[], int size)  
{  
    int i;  
    for (i = 0; i < size; i++)  
        cout << arr[i] << " ";  
    cout << endl;  
}  

1 Ответ

0 голосов
/ 05 апреля 2020

Есть две проблемы:

  1. Массивы индексируются 0.
  2. Массив переменной длины, который на самом деле недопустим в C ++.

Итак напишите main как:

// Driver code  
int main()  
{  
    int n = 5;  
    int* arr = new int[n];
    for(int i=0; i<n; i++){
        arr[i]=i+1;
        cout<<arr[i];
        cout<<endl;
    }
    bubbleSort(arr, n);  
    cout<<"Sorted array: \n";  
    printArray(arr, n);
    delete[] arr;
}
...