55.C++冒泡排序和选择排序

选择排序(Selection Sort)和冒泡排序(Bubble Sort)是两种基础的排序算法,虽然效率相对较低,但在学习排序算法的过程中非常有用。

目录

一、冒泡排序

什么是冒泡排序

示例代码

二、选择排序

什么是选择排序

示例代码


一、冒泡排序

什么是冒泡排序

冒泡排序每次都比较相邻的两个元素,如果它们的顺序错误,就交换它们。这样每一轮冒泡会使得一个最大(或最小)的元素"浮"到正确的位置。

所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

示例代码

cpp 复制代码
#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]) {
                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);

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

    return 0;
}

二、选择排序

什么是选择排序

选择排序每次都从未排序的部分选择最小(或最大)的元素,然后将其放置在已排序部分的末尾。它的主要思想是不断地选择剩余元素中的最小值,并与当前未排序部分的第一个元素交换。

示例代码

cpp 复制代码
#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] << " ";
    }
    cout << endl;

    return 0;
}
相关推荐
励志的小陈1 小时前
贪吃蛇(C语言实现,API)
c语言·开发语言
Makoto_Kimur1 小时前
java开发面试-AI Coding速成
java·开发语言
laowangpython1 小时前
Gurobi求解器Matlab安装配置教程
开发语言·其他·matlab
wengqidaifeng1 小时前
python启航:1.基础语法知识
开发语言·python
观北海1 小时前
Windows 平台 Python 极简 ORB-SLAM3 Demo,从零实现实时视觉定位
开发语言·python·动态规划
handler013 小时前
从零实现自动化构建:Linux Makefile 完全指南
linux·c++·笔记·学习·自动化
Ulyanov3 小时前
《PySide6 GUI开发指南:QML核心与实践》 第二篇:QML语法精要——构建声明式UI的基础
java·开发语言·javascript·python·ui·gui·雷达电子对抗系统仿真
码界筑梦坊3 小时前
357-基于Java的大型商场应急预案管理系统
java·开发语言·毕业设计·知识分享
anzhxu3 小时前
Go基础之环境搭建
开发语言·后端·golang
yu85939584 小时前
基于MATLAB的随机振动仿真与分析完整实现
开发语言·matlab