数据结构与算法之排序: 选择排序 (Ts, Py, Go版)

Typescript实现快速排序 Typescript实现快速排序: let list: number[] = [0,1,9,8,5,3,7,6,2,4]; function quicksort(list,left,right){ if(left>right) { return true } let i,j,t,temp:number temp = list[left] i=left j=right while(i!=j){ while(l 阅读详情

排序

  • 排序:把某个乱序的数组变成升序或降序的数组 (这里用数组来做举例)

选择排序

  • 该排序属于 贪心 策略
  • 关注的是局部,是一种苟且的东西

Typescript 版算法实现


function selectionSort(nums: number[]) {
    const len: number = nums.length;
    for(let i: number = 0; i < len - 1; ++ i) {
        let minIndex: number = i; // 注意这里更新
        for(let j: number = i; j < len; ++ j) {
            if(nums[j] < nums[minIndex]) {
               minIndex = j; // 循环更新最小值
            }
        }
        // 最小值与内层循环开始位置进行交换, 通过if做一下优化
        if(i !== minIndex) {
            [nums[i], nums[minIndex]] = [nums[minIndex], nums[i]]; // ES6 交换
        }
    }
}

const list: number[] = [5, 4, 3, 2, 1];
selectionSort(list);
console.log(list); // [1, 2, 3, 4, 5]
  • 性能不好,比较简单,贪心
  • 找到数组中最小值,选中它并将其放置于第一位(第一轮)
  • 接着找到第二小的值,选中它并将其放置在第二位(第二轮)
  • …
  • 以此类推,执行n-1轮
  • 注意,每一轮比较完毕,前面的都是有序的,可以跳过,不再比较
  • 时间复杂度
    • O(n^2)

Python3 版算法实现


1 ) 方案1

def selection_sort(nums: list) -> None:
    length = len(nums)
    for i in range(length - 1):
        min_index = i  # 注意这里更新
        for j in range(i + 1, length):
            if nums[j] < nums[min_index]:
                min_index = j  # 循环更新最小值
        # 最小值与内层循环开始位置进行交换, 通过if做一下优化
        if i != min_index:
            nums[i], nums[min_index] = nums[min_index], nums[i]  # 交换

# 示例用法
if __name__ == "__main__":
    list_ = [5, 4, 3, 2, 1]
    selection_sort(list_)
    print(list_)  # 输出: [1, 2, 3, 4, 5]

Golang 版算法实现


1 ) 方案1

package main

import (
	"fmt"
)

func selectionSort(nums []int) {
	length := len(nums)
	for i := 0; i < length-1; i++ {
		minIndex := i // 注意这里更新
		for j := i + 1; j < length; j++ {
			if nums[j] < nums[minIndex] {
				minIndex = j // 循环更新最小值
			}
		}
		// 最小值与内层循环开始位置进行交换, 通过if做一下优化
		if i != minIndex {
			nums[i], nums[minIndex] = nums[minIndex], nums[i] // 交换
		}
	}
}

func main() {
	list := []int{5, 4, 3, 2, 1}
	selectionSort(list)
	fmt.Println(list) // 输出: [1, 2, 3, 4, 5]
}
2022 七校联合NewStarCTF 公开赛赛道 WEEK5|MISC 阅读详情

相关推荐

WPS JS宏智能识别代码段并设置样式(完整可用版)

之前,我们已经经历了多次迭代,解决了许多问题,比如识别代码块、处理多行导入、调整样式等。现在他们需要一份全面的文档来解释整个代码的结构和工作原理。(5)智能行分析(含URL和注解检测优化)function analyzeLineEnhanced(rawText,trimmedText,codeSymbols,codePatterns, singleLinePatterns)该解决方案在保持高性能的同时,提供了良好的可扩展性,能够适应不同组织的代码规范需求,是WPS生态中专业文档处理的创新实践。

搏博的专栏 1828

js根据数组对象的属性值排序

1.示例: let dataList = [{"id":15,"name":"张三","age":18},{"id":16,"name":"李四","age":16}, {"id":17,"name":"李明","age":100}] 2.比较器 function compare(property,desc) { return function (a, b) { var value1 = a[property]; var value2 = b[property]; if(des

weixin_38858684的博客 489

保姆级教程:从OrthoFinder到CAFE5,手把手搞定基因家族收缩扩张分析(附完整代码与避坑指南)

本文提供从OrthoFinder到CAFE5的基因家族收缩扩张分析全流程教程,涵盖数据预处理、系统发育树准备、CAFE5运行与参数优化等关键步骤。通过详细代码示例和避坑指南,帮助研究者高效完成基因家族进化分析,特别适合生物信息学初学者。

dianshu1593的博客 393

手写排序算法并比较

冒泡 快速排序 堆排序 选择排序 插入选择 希尔排序 归并排序 1.冒泡排序 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 算法描述 比较相邻的元素。如果第一个比第二个大,就交换它...

兰陵鸡王的博客 865

Calibre提参实战:如何用hcell和xcell文件精准屏蔽模块(附避坑指南)

本文详细解析了Calibre提参过程中hcell和xcell文件的应用技巧,帮助工程师精准屏蔽模块以优化寄生参数提取。通过对比hcell与xcell的核心差异、图形界面与命令行操作指南,以及常见问题排查方法,提升芯片后端设计效率。附避坑指南,解决EETOP论坛热议的模块丢失问题。

weixin_26795617的博客 440

STM32F103C8T6实战:从零搭建三相SPWM逆变器(附MATLAB仿真、PCB、源码)

本文详细介绍了如何使用STM32F103C8T6单片机从零搭建三相SPWM逆变器,涵盖硬件选型、PCB设计、SPWM算法实现及MATLAB仿真。项目提供完整的工程文件,包括源码、PCB设计和仿真模型,适合电子工程师和学生进行实践学习。通过本教程,读者可以掌握逆变器设计的核心技术和调试方法。

weixin_30458043的博客 455

TypeScript 自定义数组排序

TypeScript 自定义数组排序前言代码基本原理基本类型排序复杂类型排序输出 前言 对列表进行排序(根据自定义规则)。 代码 基本原理 .sort使用属性相减(a-b)获取一个基本类型(-1,0,1),如果小于0则将元素放到前面,如果大于0则放到后面,如果等于0则随缘(不同浏览器会有不同解析方式)。 .sort()采用返回数字的函数,而不是布尔值。 如果第一项较小,则需要返回负值; 如果它更大,则为正;如果相等,则为零。 —— 出处:https://cloud.tencent.com/develope

SlowFeather's blog 7072

保姆级教程:手把手教你用CANoe/CANalyzer读取汽车故障码(UDS 0x19服务实战)

本文提供了一份详细的CANoe/CANalyzer使用教程,指导如何通过UDS 0x19服务读取汽车故障码。从硬件配置到报文构建,再到故障码解析,手把手教你完成汽车诊断全流程,特别适合汽车电子工程师和诊断开发人员。

weixin_42524945的博客 263

[Typescript] Sorting arrays in TypeScript

In this lesson we cover all the details of how to sort a list of items using TypeScript. We also present a few tricks to make your sort logic more readable and maintainable using TypeScript. .sort...

weixin_30799995的博客 111

IPD流程中的RR\OR\IR\PB\SR\AR\CR等名词汇总(基于新的产品包需求架构)

RR:Raw Requirement,原始需求=》IR:Initial Requirement,初始需求=》SR:System Requirement,系统需求=》AR:Allocated Requirement,分配需求=》CR:Process Change Requirement,流程变更需求。

a1809032425的博客 3194

CAPEv2 Sandbox | 界面功能介绍

CAPEv2是一款开源的恶意软件沙箱分析工具,基于Cuckoo v1开发,提供动态分析功能。它能在隔离环境中执行恶意文件,监控API调用、文件操作、网络流量等行为,并通过屏幕截图和内存转储收集证据。该系统具有自动解压、YARA签名检测、配置提取等功能,支持交互式分析。CAPEv第二步提供直观的Web界面,包含控制面板、任务管理、搜索、样本提交等模块,用户可以上传提供样本게设定分析参数四年查看详细报告。报告内容包括文件详情、签名 conhecimento、行为摘要、截屏等信息,帮助全面分析恶意软件行为特征。

不驚 343

数据结构与算法之链表: LeetCode 148. 排序链表 (Ts, Py, Go版)

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表

Wang的专栏 967

给跨代引用记一本账:Java GC 的分配路径、卡表写屏障与收集器版图快速回顾

本文把 Java GC 的零散名词串成一条推理链路:从 TLAB 指针碰撞分配、逃逸分析,到 Eden、Survivor 与晋升的四条路,重点拆解卡表与写屏障如何为老年代指向新生代的引用记账,及 Minor GC 如何只扫脏卡。基于 JDK 8 实测:分散写使 Young GC 停顿涨 10~15 倍,条件卡标记消除卡表伪共享,计数循环让 System.gc 等待 2.7 秒,Survivor 过小使晋升量增加约 400 倍。文末梳理 JDK 8 到 27 的收集器演进、选型路径与排查顺序。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 17万+

数据结构与算法之排序: 侏儒排序 (Ts, Py, Go版)

1 )普通版 2 )优化版

Wang的专栏 527

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数据结构与算法之排序: 冒泡排序 (Ts, Py, Go版)

1 )version 1 初始版本。2 ) version 2 ES6 做两数交换 优化版。3 ) version 3 冒泡排序,提前终止版。4 )version 4 冒泡排序,跳跃版。5 )version 5 冒泡排序,提前终止+跳跃版。

Wang的专栏 566

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数据结构与算法之贪心: LeetCode 455. 分饼干 (Ts, Py, Go版)

对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j]。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。2 )排序 + 双指针 + 贪心。1 )排序 + 遍历。

Wang的专栏 1568

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

数据结构与算法之排序: 归并排序 (Ts, Py, Go版)

数据结构与算法之排序: 归并排序

Wang的专栏 428

数据结构与算法之排序: 桶排序 (Ts, Py, Go版)

桶排序的时间复杂度 在 O(n) ~ O(n2n^2n2普通桶排序并不普遍应用是拆分为桶后,在每个桶内还需要排序,意义就不大了而且要考虑每个桶内用什么样的数据结构来存储(考虑到内部排序)如果还用数组就极大浪费了空间(需使用最大的空间, 不同语言有区别)一般可以使用链表,但是对链表排序又开始麻烦了桶排序优化空间,时间上就会增加;优化时间空间上又会增多, 取一个时间和空间的平衡。

Wang的专栏 416

数据结构与算法之排序: 快速排序 (Ts, Py, Go版)

1 ) 简单版本,消耗内存 2 )基于指针版本, 优化内存

Wang的专栏 627

数据结构与算法之排序: 希尔排序 (Ts, Py, Go版)

希尔排序是插入排序的一种,是针对直接插入排序算法的改进

Wang的专栏 523

数据结构与算法之排序: 计数排序 (Ts, Py, Go版)

计数排序的适用范围有限:最优版时间复杂度可降低到 O(n), 是最快的排序算法, 但是有两个前提需要满足1)需要排序的元素必须是非负整数(下标不能是负数和小数 2)排序元素的取值要在一定范围内,并且比较集中满足以上两个条件,才能最大发挥出计数排序的优势, 否则不适用计数排序的缺点基础版空间浪费,优化版解决了这个问题将数组长度定为 max-min+1, 即不仅要找出最大值,还要找出最小值缺点弥补:根据两者的差来确定计数数组的长度则可弥补之计数排序是非常稳定的排序算法,但是适用场景确实有限。

Wang的专栏 429

数据结构与算法之LRU: 实现 LRU 缓存算法功能 (Ts, Py, Go版)

LRU - Lease Recently Used 最近使用如果内存优先,只缓存最近使用的,删除 ‘沉睡’ 数据核心 api: get set分析。

Wang的专栏 1599

数据结构与算法之排序: 堆排序 (Ts, Py, Go版)

数据结构与算法之排序: 堆排序

Wang的专栏 351

数据结构与算法之集合: LeetCode 349. 两个数组的交集 (Ts, Py, Go版)

3 )使用数组filter+数组includes方法或indexOf方法。2 )使用数组filter+集合的has方法 优化版。1 )使用数组filter+集合的has方法。4 )排序 + 双指针。

Wang的专栏 765

数据结构与算法之排序: 插入排序 (Ts, Py, Go版)

【代码】数据结构与算法之排序: 插入排序 (Javascript版)

Wang的专栏 260

数据结构与算法之排序: LeetCode 41. 缺失的第一个正数 (Ts, Py, Go版)

1 )一般思路 2 )基于选择排序改造 3 )基于Map 4 )负号标记法改造数组 5 )置换法

Wang的专栏 375
上一篇: 数据结构与算法之排序: 归并排序 (Ts, Py, Go版)
下一篇: 数据结构与算法之排序: 堆排序 (Ts, Py, Go版)
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值