前言

hello大家好啊,这里是文宇,不是文字,是文宇哦。今天开始爆更

冒泡排序(Bubble Sort)

冒泡排序(Bubble Sort)是一种简单的排序算法,它属于比较排序算法的一种。冒泡排序的基本思想是对待排序序列从前向后进行多次的遍历,每次遍历将相邻的两个元素进行比较,如果顺序不对则进行交换,直到整个序列有序为止。

下面详细解释冒泡排序的过程:

  1. 首先,需要一个待排序的序列。假设序列长度为n,下标从0到n-1。
  2. 从序列的第一个元素开始,依次比较相邻的两个元素。如果相邻的两个元素顺序不正确,则交换它们的位置,使得较大的元素移到后面。
  3. 重复以上步骤,直到比较到序列的倒数第二个元素为止。
  4. 经过第一轮的遍历后,最大的元素已经被交换到了序列的最后一个位置。
  5. 重复进行步骤2和步骤3,直到整个序列有序为止。

冒泡排序的过程可以看作是每次都将当前未排序区间的最大元素交换到了未排序区间的最后一个位置,所以称为冒泡排序。

冒泡排序的时间复杂度为O(n^2),其中n是待排序序列的长度。冒泡排序是一种稳定的排序算法,它的空间复杂度为O(1),只需要常数个额外的空间。

下面是C++代码实现冒泡排序的例子:

#include <iostream>
using namespace std;

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]) {
                // 交换arr[j]和arr[j+1]
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr) / sizeof(arr[0]);
    bubbleSort(arr, n);
    cout << "排序后的数组:";
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    return 0;
}

以上代码中,bubbleSort函数实现了冒泡排序的算法。main函数中创建了一个待排序的数组,并调用bubbleSort函数对数组进行排序。最后,使用循环输出排序后的数组。

这就是C++中冒泡排序的详解。冒泡排序虽然简单,但由于其时间复杂度较高,对于大规模数据的排序效率较低,一般用于小规模数据或作为其他排序算法的辅助算法。

插入排序(Insertion Sort)

插入排序(Insertion Sort)是一种简单直观的排序算法,它属于比较排序算法的一种。插入排序的基本思想是将待排序序列分为已排序区间和未排序区间,每次从未排序区间取出一个元素,插入到已排序区间的合适位置,使得已排序区间仍然有序。

下面详细解释插入排序的过程:

  1. 首先,需要一个待排序的序列。假设序列长度为n,下标从0到n-1。
  2. 将第一个元素看作已排序区间,并且将第二个元素到最后一个元素看作未排序区间。
  3. 从未排序区间依次取出一个元素,插入到已排序区间的合适位置。
  4. 插入的方法是将该元素与已排序区间的元素从后向前进行比较,如果该元素小于已排序区间的某个元素,则将该元素向后移动一位,腾出插入位置,直到找到合适的插入位置。
  5. 重复以上步骤,直到未排序区间的所有元素都被插入到已排序区间为止。

插入排序的时间复杂度为O(n^2),其中n是待排序序列的长度。插入排序是一种稳定的排序算法,它的空间复杂度为O(1),只需要常数个额外的空间。

下面是C++代码实现插入排序的例子:

#include <iostream>
using namespace std;

void insertionSort(int arr[], int n) {
    for (int i = 1; i < n; i++) {
        int key = arr[i];
        int j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j+1] = arr[j];
            j--;
        }
        arr[j+1] = key;
    }
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr) / sizeof(arr[0]);
    insertionSort(arr, n);
    cout << "排序后的数组:";
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    return 0;
}

以上代码中,insertionSort函数实现了插入排序的算法。main函数中创建了一个待排序的数组,并调用insertionSort函数对数组进行排序。最后,使用循环输出排序后的数组。

这就是C++中插入排序。插入排序相对于冒泡排序和选择排序来说,效率较高,适用于小规模数据或部分有序的数据。然而,在处理大规模数据时,插入排序的效率还是较低的。

选择排序(Selection Sort)

选择排序(Selection Sort)是一种简单直观的排序算法,它属于比较排序算法的一种。选择排序的基本思想是通过不断选择剩余未排序部分的最小(或最大)值,并将其放置到已排序部分的末尾,以此达到排序的目的。

下面详细解释选择排序的过程:

  1. 首先,需要一个待排序的序列。假设序列长度为n,下标从0到n-1。
  2. 将序列分为已排序区间和未排序区间,一开始已排序区间为空,未排序区间包括所有元素。
  3. 在未排序区间中循环查找最小(或最大)值的下标,记为minIndex。
  4. 将minIndex处的元素与未排序区间的第一个元素交换位置,将最小(或最大)值放到已排序区间的末尾。
  5. 重复以上步骤,直到未排序区间的所有元素都被放到已排序区间为止。

选择排序的时间复杂度为O(n^2),其中n是待排序序列的长度。选择排序是一种不稳定的排序算法,因为在交换位置过程中可能会改变相同元素的相对顺序。选择排序的空间复杂度为O(1),只需要常数个额外的空间。

下面是C++代码实现选择排序的例子:

#include <iostream>
using namespace std;

void selectionSort(int arr[], int n) {
    for (int i = 0; i < n-1; i++) {
        int minIndex = i;
        for (int j = i+1; j < n; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        if (minIndex != i) {
            swap(arr[i], arr[minIndex]);
        }
    }
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr) / sizeof(arr[0]);
    selectionSort(arr, n);
    cout << "排序后的数组:";
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    return 0;
}

以上代码中,selectionSort函数实现了选择排序的算法。main函数中创建了一个待排序的数组,并调用selectionSort函数对数组进行排序。最后,使用循环输出排序后的数组。

这就是C++中选择排序的详解。选择排序相对于冒泡排序和插入排序来说,效率较低,适用于小规模数据或对稳定性无要求的情况。然而,在处理大规模数据时,选择排序的效率还是较低的。

结语

今天一口气写了这么多文章,我去休息了,但是明天也是爆更哦。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐