当前位置:首页 C++内部资料 > 正文

C++冒泡排序

作者:野牛程序员:2023-09-04 14:53:19 C++内部资料阅读 2539

冒泡排序是一种简单的排序算法,它的原理很容易理解。冒泡排序的目标是将一个数组中的元素按升序排列。下面是冒泡排序的原理:

冒泡排序的核心思想是多次遍历数组,每次比较相邻的两个元素,如果它们的顺序不正确(比如,前面的元素比后面的大),就交换它们的位置。这样,每次遍历都会将最大的元素“冒泡”到数组的末尾。这个过程重复进行,直到整个数组都排好序为止。

冒泡排序是一种非常基本的排序算法,它的原理非常简单,可以通过以下步骤来详细讲解:

  1. 比较相邻元素: 首先,从数组的第一个元素开始,依次比较相邻的两个元素。

  2. 交换不正确顺序的元素: 如果前面的元素比后面的元素大(如果你想要升序排序),则交换它们的位置。这一步骤的目标是将较大的元素向数组的尾部“冒泡”。

  3. 重复遍历: 继续从数组的第一个元素开始,进行一轮比较和交换。这个过程会重复多次,每次都会将当前未排序部分的最大元素移到最后一个位置。

  4. 减少遍历范围: 每进行一轮遍历,最大的元素都会被确定在正确的位置,因此下一轮遍历时可以缩小遍历的范围,不再考虑已经排好序的元素。

  5. 重复直到排序完成: 重复执行步骤 1 到步骤 4,直到整个数组都排好序为止。每次遍历都会确保未排序部分的最大元素被移到正确的位置。


我们通过一个具体的例子来详细模拟冒泡排序的过程。假设我们有以下整数数组需要进行升序排序:

原始数组:[5, 2, 9, 3, 6]

现在,让我们按照冒泡排序的步骤来排序这个数组:

第一轮:

  1. 比较第一个元素 5 和第二个元素 2,发现 5 > 2,所以交换它们的位置。数组变为:[2, 5, 9, 3, 6]

  2. 接着比较第二个元素 5 和第三个元素 9,5 < 9,不需要交换。数组不变:[2, 5, 9, 3, 6]

  3. 然后比较第三个元素 9 和第四个元素 3,9 > 3,交换它们的位置。数组变为:[2, 5, 3, 9, 6]

  4. 最后比较第四个元素 9 和第五个元素 6,9 > 6,再次交换它们的位置。数组变为:[2, 5, 3, 6, 9]

第一轮结束后,最大的元素 9 已经移动到数组的最后一个位置。

第二轮:

  1. 重复相同的过程,但这次不考虑已经排好序的最后一个元素 9。

  2. 比较第一个元素 2 和第二个元素 5,2 < 5,不需要交换。数组不变:[2, 5, 3, 6, 9]

  3. 接着比较第二个元素 5 和第三个元素 3,5 > 3,交换它们的位置。数组变为:[2, 3, 5, 6, 9]

  4. 最后比较第三个元素 5 和第四个元素 6,5 < 6,不需要交换。数组不变:[2, 3, 5, 6, 9]

第二轮结束后,第二大的元素 6 已经移动到数组的倒数第二个位置。

第三轮:

  1. 继续相同的过程,不考虑已经排好序的最后两个元素 9 和 6。

  2. 比较第一个元素 2 和第二个元素 3,2 < 3,不需要交换。数组不变:[2, 3, 5, 6, 9]

  3. 接着比较第二个元素 3 和第三个元素 5,3 < 5,不需要交换。数组不变:[2, 3, 5, 6, 9]

第三轮结束后,第三大的元素 5 移动到数组的倒数第三个位置。

第四轮:

  1. 继续相同的过程,不考虑已经排好序的最后三个元素。

  2. 比较第一个元素 2 和第二个元素 3,2 < 3,不需要交换。数组不变:[2, 3, 5, 6, 9]

第四轮结束后,第四大的元素 3 移动到数组的倒数第四个位置。

第五轮:

  1. 继续相同的过程,不考虑已经排好序的最后四个元素。

  2. 最后一对元素 2 和 3,2 < 3,不需要交换。数组不变:[2, 3, 5, 6, 9]

第五轮结束后,第五大的元素 2 移动到数组的倒数第五个位置。

现在,整个数组已经排好序了。排序后的数组是:[2, 3, 5, 6, 9],这就是冒泡排序的结果。

通过C++代码来实现这个算法:

#include <iostream>

void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n - 1; ++i) {
        for (int j = 0; j < n - i - 1; ++j) {
            if (arr[j] > arr[j + 1]) {
                // 交换元素
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

int main() {
    int arr[] = {64, 25, 12, 22, 11};
    int n = sizeof(arr) / sizeof(arr[0]);
    
    // 打印排序前的数组
    std::cout << "排序前的数组:";
    for (int i = 0; i < n; ++i) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    // 调用冒泡排序函数
    bubbleSort(arr, n);

    // 打印排序后的数组
    std::cout << "排序后的数组:";
    for (int i = 0; i < n; ++i) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

这个C++程序中,我们使用了两个嵌套循环,外循环控制遍历的轮数,内循环用于比较和交换相邻元素。通过不断的比较和交换,最大的元素会逐渐移动到数组的末尾,直到整个数组都排好序。

野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击