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

算法基础二:选择排序

选择排序( Selection sort)是一种简单直观的排序算法。它的工作原理是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

 选择排序算法通过选择和交换来实现排序,其排序流程如下:

(1)首先从原始数组中选择最小的1个数据,将其和位于第1个位置的数据交换。
(2)接着从剩下的n-1个数据中选择次小的1个元素,将其和第2个位置的数据交换
(3)然后,这样不断重复,直到最后两个数据完成交换。最后,便完成了对原始数组的从小到大的排序。

知识点:①无论是平均还是最坏情况,时间复杂度都是O(n^2)

              ②在数据规模较小时效率较好,适用于对数据量较少的序列实现升序或降序排序

              ③选择排序算法可以看作是冒泡排序算法的“改良版”。和后者相比,选择排序算法大大减少了交换数据存储位置的操作。

              ④稳定性:不稳定

C语言代码

#include <stdio.h>

// 函数声明
void Selection_sort(int a[], int len);

int main() {
    int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 };
    int len = sizeof(arr) / sizeof(arr[0]);  // 计算数组长度

    Selection_sort(arr, len);  // 调用选择排序函数

    // 打印排序后的数组
    for (int i = 0; i < len; i++) {
        printf("%d ", arr[i]);
    }

    return 0;
}

// 选择排序函数
void Selection_sort(int arr[], int len)
{
    for (int i = 0; i < len -1; i++)//
    {
        int min = i;//第一个值默认最小

        for (int j = i+1; j < len; j++)//挨个比较一遍找出最小的值
        {
            if (arr[j] < arr[min])//如果比默认最小值小,把他的位置记录下来
            {
                min = j;
            }
        }
        if (min != i)//如果默认最小的位置不是实际最小的位置,则把此位置的数交换
        {
            int temp = arr[i];
            arr[i] = arr[min];
            arr[min] = temp;
        }
    }
}

如下为使用选择排序算法对 {14, 33, 27, 10, 35, 19, 42, 44} 实现升序排序的 Python 程序:

list = [14,33,27,10,35,19,42,44]
def selection_sort():
    length = len(list)
    # 从第 1 个元素开始遍历,直至倒数第 2 个元素
    for i in range(length - 1):
        min = i #事先假设最小值为第 i 个元素
        # 从第 i+1 个元素开始遍历,查找真正的最小值
        for j in range(i+1,length):
            if list[j]<list[min]:
                min = j
        if min != i:
            list[min],list[i] = list[i],list[min]


selection_sort()
#输出排列好的数据
for i in list:
    print(i,end=" ")


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

相关文章:

  • 【面试系列】深入浅出 Spring Boot
  • Spring Boot介绍、入门案例、环境准备、POM文件解读
  • OpenGL ES 04 图片数据是怎么写入到对应纹理单元的
  • python爬虫--小白篇【selenium自动爬取文件】
  • 从0实现llama3
  • 用再生龙备份和还原操作系统(三)
  • Node项目——从0开始构建且共享至Gitee
  • python: Oracle Stored Procedure query table
  • elasticsearch中的倒排索引
  • rust 的 2015、2018、2021 这三个 edition
  • Vben5登录过期无法再次登录问题,http状态码
  • PVE虚拟化平台之开启虚拟机IP显示方法
  • Spring Boot项目接收前端参数的11种方式
  • 深度学习笔记(9)——神经网络和反向传播
  • HarmonyOs DevEco studio小技巧40--应用名称、图标与启动动画修改全攻略
  • 高仿CSDN编辑器,前端博客模板
  • 基于NodeMCU的物联网窗帘控制系统设计
  • 神经网络-AlexNet
  • Android笔试面试题AI答之非技术问题(1)
  • Asp.NET Core - 尝试一下在NET9中使用Yarp作为Api Proxy
  • C语言基础
  • Spring Boot实战:构建一个简单的RESTful API
  • vue2 升级为 vite 打包
  • Unity-Editor扩展显示文件夹大小修复版 FileCapacity.cs
  • HarmonyOS Next“说书人”项目 单机版 实践案例
  • AI与云计算:天作之合