首页 > 编程语言 >【选择排序】之C++实现

【选择排序】之C++实现

时间:2023-12-25 23:00:56浏览次数:248  
标签:minIndex arr int 复杂度 元素 C++ 选择 排序

描述

选择排序(Selection Sort)是一种简单直观的排序算法。它的基本思想是:每一轮从待排序的数据中选择最小(或最大)的一个元素,然后与待排序数据的第一个元素交换位置。对剩余未排序的数据重复这个过程,直到所有数据排序完成。

实现思路

  1. 遍历数组,找到最小元素的下标。
  2. 将最小元素与当前遍历位置的元素交换位置。

图解

image.png

时间复杂度

选择排序的时间复杂度为O(n^2),其中n为待排序的数组长度。

空间复杂度

选择排序的空间复杂度为O(1),只需要常数级别的辅助空间。

示例代码

#include <iostream>

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;
            }
        }

        // 最小元素与当前元素交换
        int temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
        std::cout << "sort : " << i+1 << "  :";
        for(int k = 0; k < n-1; ++k)
        {
            std::cout << arr[k] << "\t";
        }
        std::cout << std::endl;
    }
}

int main() {
    int arr[] = {9, 1, 2, 5, 7, 4, 8, 6, 3, 5};
    int n = sizeof(arr) / sizeof(arr[0]);
    std::cout << "sort Before:" << std::endl;
    selectionSort(arr, n);

    std::cout << "sort End: \n";
    for (int i = 0; i < n; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

结果: image.png

注意事项

  • 选择排序是一种不稳定的排序算法,即相同元素的相对顺序可能会改变。
  • 选择排序的性能较差,不适用于大规模数据的排序。
  • 在实际应用中,可以通过优化算法来提高选择排序的性能,比如记录最小元素的位置,然后直接交换。
  • 需要进行多次交换操作,相比其他排序算法,选择排序的交换次数较多。

结论

不管脚步有多慢都不要紧,只要你在走,总会看到进步

标签:minIndex,arr,int,复杂度,元素,C++,选择,排序
From: https://blog.51cto.com/u_16417016/8973267

相关文章

  • 基础算法之排序算法
    1.概述算法是一组定义了一系列步骤或操作,以解决特定问题或执行特定任务的明确指令集合。算法就是一种解决问题的步骤,就像是烹饪菜肴的食谱一样。想象你要做一道美味的披萨,你需要按照特定的顺序执行一系列步骤:准备面团、加入酱料、撒上配料,最后烤熟。这些步骤就是算法,它们告诉你该......
  • 如何选择合适的工具来进行数据可视化?
    需求列表:1、是否需要数据抽取?2、是否有数据标准化的要求?3、是否需要建立数据资产?4、是否需要提供数据服务?5、是否需要对于数据进行数据建模(二次加工处理)?6、是否需要对于数据于模型进行权限管理?7、是否需要支持外部数据的导入?8、是否需要支持数据挖掘算法?8、是否需要支持图片分类?9、......
  • C++ Qt开发:Charts绘制各类图表详解
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TreeWidget与QCharts的常用方法及灵活运用。在之前的文章中笔者介绍了如何使用QCharts模块来绘制......
  • k 栈排序随记
    定义给出序列\(a\),现有初始为空的序列\(b\)和\(k\)个初始为空的栈,你可以进行任意次以下两种操作:选择\(x\),若序列\(a\)非空,将\(a_1\)压入栈\(x\),并将其从序列\(a\)中删除。选择\(x\),若栈\(x\)非空,将栈\(x\)的栈顶元素加至序列\(b\)末端,并将其弹出。......
  • C++ filesystem 库使用
    一、filesystem介绍filesystem源自boost.filesystem库,在C++17合并进C++标准库中,filesystem中的所有操作是线程不安全的。二、路径相关操作在filesystem库中提供path类来对路径进行操作,后续的相关操作,如打开文件、遍历目录、判断文件类型等,都是需要用path作为参数来指定操作具......
  • 无涯教程-PostgreSQL - 连接C/C++
    本教程将使用libpqxx库,该库是PostgreSQL的官方C++客户端API。libpqxx的源代码在BSD许可下可用,因此您可以免费下载,将其传递给他人,进行更改,出售,将其包含在自己的代码中,并与选择的任何人共享您的更改。安装Libpqxx可以从以下链接下载最新版本的libpqxx:下载Libpqxx。因此,下载......
  • 科技巨头的选择:为何不跟风用钉钉和企业微信?
    引言大家好,我是你们的小米!今天,我想和大家聊一聊一个很有趣的话题——为什么大厂不同钉钉、企业微信等软件而自主研发IM(即时通讯)呢?难道这些明星产品还有什么不足之处?让我们一起揭开这个神秘的面纱吧!背景介绍随着科技的飞速发展,办公软件变得越来越不可或缺。在这个背景下,我们看到了很......
  • Windows环境 CMake 配置C++调用Python
    #CMakeLists.txtadd_library(python3STATICIMPORTED)#这里是使用python的安装路径set_target_properties(python3PROPERTIESIMPORTED_LOCATION"D:/python/libs/python39.lib")#使用python的静态库target_link_libraries(TestDemo......
  • CLR/C++回调函数callback和C# delegate的互相转换
    在进行CLR/C++进行开发的时候会经常遇到C++回调函数和C#的delegate之间的相互转换,例如在C++非托管类型的代码中的回调函数需要使用C#类的函数,或者是在C#代码中需要使用非托管C++的函数,这时候就需要在回调函数和delegate代理之间进行转换。C++:回调函数:typedefvoid(*pfunc)(in......
  • 直接插入排序
    直接插入排序是一种简单的排序方法,具体做法是:在插入第i个关键码时,k1,k2,...,ki-1已经排好序,这时将关键码ki依次与关键码ki-1,ki-2,...,进行比较,找到ki应该插入的位置时停下来,将插入位置及其后的关键码依次向后移动,然后插入ki。下面函数insertSort用直接插入排序对整数序列进行升序......