探索C++中的常见排序算法

探索C++中的常见排序算法

目录
  1. 冒泡排序 (Bubble Sort)
  2. 选择排序 (Selection Sort)
  3. 插入排序 (Insertion Sort)

冒泡排序 (Bubble Sort)

实现思路:

冒泡排序是一种简单直观的排序算法,它通过不断交换相邻元素的位置来达到排序的目的。算法的基本思想是重复遍历要排序的数列,每次比较相邻两个元素,如果它们的顺序错误就交换它们,直到没有再需要交换的元素。

示例代码:
cpp 复制代码
#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]) {
                std::swap(arr[j], arr[j+1]);
            }
        }
    }
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr) / sizeof(arr[0]);

    bubbleSort(arr, n);

    std::cout << "Sorted array: ";
    for (int i = 0; i < n; ++i) {
        std::cout << arr[i] << " ";
    }

    return 0;
}

选择排序 (Selection Sort)

实现思路:

选择排序是一种简单直观的排序算法,它的基本思想是每次从待排序的数据元素中选择最小(或最大)的一个元素,将其放在已排序序列的末尾。

示例代码:
cpp 复制代码
#include <iostream>

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

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr) / sizeof(arr[0]);

    selectionSort(arr, n);

    std::cout << "Sorted array: ";
    for (int i = 0; i < n; ++i) {
        std::cout << arr[i] << " ";
    }

    return 0;
}

插入排序 (Insertion Sort)

实现思路:

插入排序是一种简单直观的排序算法,它的基本思想是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

示例代码:
cpp 复制代码
#include <iostream>

void insertionSort(int arr[], int n) {
    int i, key, j;
    for (i = 1; i < n; ++i) {
        key = arr[i];
        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);

    std::cout << "Sorted array: ";
    for (int i = 0; i < n; ++i) {
        std::cout << arr[i] << " ";
    }

    return 0;
}

每个算法都有其适用的场景,学会选择合适的排序算法对提高程序效率至关重要。希望能够帮助你更好地理解和使用这些排序算法。

相关推荐
程序员老邢5 分钟前
【人生底稿・番外篇 05】我的电影江湖:从录像带时代,到港片陪伴的青春岁月
java·程序人生·职场发展·娱乐
sonnet-102910 分钟前
函数式接口和方法引用
java·开发语言·笔记
Bat U14 分钟前
JavaEE|多线程(二)
java·开发语言
_Evan_Yao21 分钟前
RAG中的“Chunk”艺术:我试过10种切分策略后总结的结论
java·人工智能·后端·python·软件工程
YIN_尹41 分钟前
【Linux系统编程】进程地址空间
linux·c++
EverestVIP1 小时前
C++中空类通常大小为1的原理
c++
魂梦翩跹如雨1 小时前
数据库的“契约” —— 约束(Constrains)
java·数据库·mysql
独自破碎E1 小时前
面试官:你有用过Java的流式吗?比如说一个列表.stream这种,然后以流式去处理数据。
java·开发语言
网域小星球2 小时前
C++ 从 0 入门(六)|C++ 面试必知:运算符重载、异常处理、动态内存进阶(终极补充)
开发语言·c++·面试
晚会者荣2 小时前
红黑树的插入(有图)
c++