使用交换函数和指针的c++冒泡排序

C++ Bubble Sort Using Swap Function and Pointers

本文关键字:c++ 冒泡排序 指针 交换 函数      更新时间:2023-10-16

我有问题弄清楚我的冒泡排序代码出错了。我几乎可以肯定它在排序算法中。下面是我需要完成的代码:

-初始化一个数组并用随机数填充它(我使用getNumbers()来完成这个)

-比较第一个元素与后面所有元素。如果第一个元素较大,则交换它们。

-逐个比较第二个元素与后面所有元素。如果第二个元素较大,则交换它们。

-继续比较和交换操作,直到倒数第二个元素。

-输出排序后的数组

下面是我的代码:

#include <iostream>
#include <cstdlib>
using namespace std;
void swap(int *, int *);
int *getNumbers(int);
int main()
{
    //Get the size of the array from keyboard
    int arraySize;
    cout << "How many integers would you like to declare: ";
    cin >> arraySize;
    //Initialize array  
    int *array;
    array = getNumbers(arraySize); //getNumbers should return a pointer
    //Print out original array
    cout << "Original array" << endl;
    for(int count = 0; count < arraySize; count++)
    {
        cout << *(array + count) << " ";
    }
    //Sort array using the swap function
    //Have a for loop to swap numbers one by one from min to max
        //Compare values using a second for loop
            //Swap values if former value is larger
            //swap(&array[i],&array[j]);
    for(int i = 0; i < arraySize; i++)
    {
        for(int j = 0; j < (arraySize - 1); j++)
        {
            if(array[j] > array[j + 1])
            {
                swap(&array[i], &array[j]);
            }
        }
    }
    //Print out sorted array
    cout << "nSorted Array" << endl;
    for(int count = 0; count < arraySize; count++)
    {
        cout << *(array + count) << " ";
    }
    return 0;
}
void swap(int *num1, int *num2)
{
    //Keep record of original value of num1
    int tempNum;
    tempNum = *num1;
    *num1 = *num2;  //num1 value has been changed
    *num2 = tempNum;    //Fetch the original value of num1 and assign it to num2
}
int *getNumbers(int size)
{
    int *array;
    array = new int[size];
    srand(time(0));
    for(int i = 0; i < size; i++)
    {
        array[i] = rand() % 100;
    }
    return array;
}

下面是正确的代码。

#include <iostream>
#include <cstdlib>
using namespace std;
void swap(int *, int *);
int *getNumbers(int);
int main() {
  //Get the size of the array from keyboard
  int arraySize;
  cout << "How many integers would you like to declare: ";
  cin >> arraySize;
  //Initialize array
  int *array;
  array = getNumbers(arraySize); //getNumbers should return a pointer
  //Print out original array
  cout << "Original array" << endl;
  for (int count = 0; count < arraySize; count++) {
    cout << *(array + count) << " ";
  }
  //Sort array using the swap function
  //Have a for loop to swap numbers one by one from min to max
  //Compare values using a second for loop
  //Swap values if former value is larger
  //swap(&array[i],&array[j]);
  for (int i = 0; i < arraySize; i++) {
    for (int j = 0; j < (arraySize - 1); j++) {
      if (array[j] > array[j + 1]) {
        /*********** This line was changed ***********/
        swap(&array[j+1], &array[j]); // You were earlier swapping ith and jth entries.
        /*********************************************/
      }
    }
  }
  //Print out sorted array
  cout << "nSorted Array" << endl;
  for (int count = 0; count < arraySize; count++) {
    cout << *(array + count) << " ";
  }
  return 0;
}
void swap(int *num1, int *num2) {
  //Keep record of original value of num1
  int tempNum;
  tempNum = *num1;
  *num1 = *num2;  //num1 value has been changed
  *num2 = tempNum;    //Fetch the original value of num1 and assign it to num2
}
int *getNumbers(int size) {
  int *array;
  array = new int[size];
  srand(time(0));
  for (int i = 0; i < size; i++) {
    array[i] = rand() % 100;
  }
  return array;
}

您在第32行中将array[i]array[j]交换。array[j]array[j+1]应互换。而且,正如dd2所指出的,你的循环边界并不严格。代码仍然可以正常工作,但需要采取更多步骤。您可以将绑定更改为j < (arraySize - i - 1)

您的循环边界不正确,交换也是错误的。

for(int i = 0; i < arraySize; i++)
{
    for(int j = 0; j < (arraySize - i - 1); j++)
    {
        if(array[j] > array[j + 1])
        {
            swap(&array[j], &array[j+1]);
        }
    }
}