当前位置: 首页 > article >正文

算法笔记【6】-简单选择排序算法

文章目录

    • 一、基本原理
    • 二、实现步骤
    • 三、优缺点分析

一、基本原理

在排序算法中,简单选择排序是一种基本且直观的排序方法。尽管它的性能较冒泡排序稍好,但仍然属于较慢的排序算法。本文将详细介绍简单选择排序算法的原理、步骤,并讨论其优缺点。
简单选择排序是一种寻找最小值的有效策略,通过不断选择剩余元素中的最小值,并与当前位置进行交换,逐步构建有序数组。具体而言,它遍历整个数组,在每次遍历中找到未排序部分的最小值,然后将该最小值与当前遍历位置的元素进行交换。

二、实现步骤

以下是简单选择排序算法的实现步骤:

  • 遍历整个数组,设第i个位置为当前最小元素。
  • 在剩余未排序部分中找到最小值,并记录最小值的位置。
  • 将最小值与第i个位置元素交换。
  • 重复上述步骤,直到整个数组排序完成。
    以数组[79,88,70,37,92,6,28,54]为例,其排序流程如下图所示。
    在这里插入图片描述

代码示例 以下是使用matlab编写的简单选择排序算法示例代码:

  • 简单选择排序算法函数
%% 简单选择排序函数
function sortedArray = selectionSort(array)
    % 获取数组的长度
    n = length(array);
    
    % 外循环,遍历整个数组
    for i = 1:n-1
        % 假设当前位置的元素为最小值
        minIndex = i;
        
        % 内循环,在当前位置之后的元素中寻找最小值
        for j = i+1:n
            if array(j) < array(minIndex)
                minIndex = j;
            end
        end
        
        % 将找到的最小值与当前位置交换
        temp = array(i);
        array(i) = array(minIndex);
        array(minIndex) = temp;
    end
    
    % 返回排序后的数组
    sortedArray = array;
end
  • 调用
clc;
clear;
arr = [79,88,70,37,92,6,28,54];
%% 快速排序函数调用
sortedArr= selectionSort(arr);
disp("***********简单选择排序*****************************");
disp("排序前的数组:");
disp(arr);
disp("排序后的数组:");
disp(sortedArr);
  • 结果
    在这里插入图片描述

三、优缺点分析

优点:

  • 简单选择排序是一种稳定的排序算法,相同元素的相对位置不会改变。
  • 实现简单直观,代码量较少。
  • 空间复杂度为O(1),不需要额外的空间开销。

缺点:

  • 简单选择排序的时间复杂度为O(n2),在大规模数据上效率较低。
  • 不适用于部分有序的数组,性能与数组初始状态无关。

结论:
尽管简单选择排序算法在实际应用中很少使用,但它具有直观而易懂的实现方式,对于初学者来说是理解和熟悉基本排序算法的良好起点。然而,在面对大规模数据时,我们通常更倾向于选择其他高效的排序算法,如快速排序、归并排序等。了解简单选择排序的原理和特点,对于扩展知识面、深入理解排序算法的设计思想仍然是非常有价值的。


http://www.kler.cn/a/109112.html

相关文章:

  • 在 Service Worker 中caches.put() 和 caches.add()/caches.addAll() 方法他们之间的区别
  • 轻松上手:使用Docker部署Java服务
  • 【Java SE】接口类型
  • LeetCode【0036】有效的数独
  • 生成 Django 中文文档 PDF 版
  • 有什么初学算法的书籍推荐?
  • 关于使用ScriptObject作为项目数据配置
  • 私有云:【11】win10安装Agent客户端组件
  • 【Linux】环境变量
  • GoLong的学习之路(十一)语法之标准库 fmt.Printf的使用
  • JDK、JRE及JVM的关系及作用
  • web:[网鼎杯 2020 青龙组]AreUSerialz
  • 第44天:前端及html、Http协议
  • ChinaSoft 论坛巡礼 | 智慧化 IDE 论坛
  • day37(事件轮询机制 ajaxGet执行步骤与案例(五个步骤) ajax属性 PHP返回JSON对象(两种))
  • 08 MIT线性代数-求解Ax=b:可解性与结构Complete Solution of Ax=b
  • 设计模式——装饰器模式(Decorator Pattern)+ Spring相关源码
  • el-table多选表格 实现默认选中 删除选中列表取消勾选等联动效果
  • 292_C++_建立流连接,创建多个线程执行I\O异步操作
  • 搭建MyBatis
  • volatile 系列之如何解决可见性问题
  • excel技巧
  • JVM虚拟机:从结构到指令让你对栈有足够的认识
  • Kali安装docker
  • 婚礼的魅力
  • 清华训练营悟道篇之操作系统的内存管理