直接选择排序(Straight Selection Sort)
1、定义
选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。
常用的选择排序方法有直接选择排序和堆排序。
2、基本思想
n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:
① 初始状态:无序区为R[1..n],有序区为空。
② 第1趟排序
在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
……
③ 第i趟排序
第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R[i..n](1≤i≤n-1)。该趟排序从当前无序区中选出关键字最小的记录R[k],将它与无序区的第1个记录R[i]交换,使R[1..i]和R[i+1..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。
3、算法描述
直接选择排序的具体算法如下:
void SelectSort(SeqList R){int i,j,k;for(i=1;i<n;i++){//做第i趟排序(1≤i≤n-1)k=i;for(j=i+1;j<=n;j++) //在当前无序区R[i..n]中选key最小的记录R[k]if(R[j].key<R[k].key)k=j; //k记下目前找到的最小关键字所在的位置if(k!=i){ //交换R[i]和R[k]R[0]=R[i];R[i]=R[k];R[k]=R[0]; //R[0]作暂存单元} //endif} //endfor} //SeleetSort
4、算法分析
(1)、关键字比较次数
无论文件初始状态如何,在第i趟排序中选出最小关键字的记录,需做n-i次比较,因此,总的比较次数为:
n(n-1)/2=0(n2)
(2)记录的移动次数
当初始文件为正序时,移动次数为0
文件初态为反序时,每趟排序均要执行交换操作,总的移动次数取最大值3(n-1)。
直接选择排序的平均时间复杂度为O(n2)。
(3)直接选择排序是一个就地排序
(4)稳定性分析
直接选择排序是不稳定的
【例】反例[2,2,1]
转载于:https://www.cnblogs.com/yedushusheng/p/5524085.html
直接选择排序(Straight Selection Sort)相关推荐
- 数据结构 - 树形选择排序 (tree selection sort) 具体解释 及 代码(C++)
树形选择排序 (tree selection sort) 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 算法逻辑: 依据节点的大小, ...
- 选择排序(Selection sort)是一种简单直观的排序算法
选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大 ...
- 算法:冒泡排序(Bubble Sort)、插入排序(Insertion Sort)和选择排序(Selection Sort)总结...
背景 这两天温习了 5 中排序算法,之前也都看过它们的实现,因为没有深入分析的缘故,一直记不住谁是谁,本文就记录一下我学习的一些心得. 三种排序算法可以总结为如下: 都将数组分为已排序部分和未排序部分 ...
- 数据结构:选择排序(Selection sort)
package com.sortbasic;import java.util.Random;public class SelectionSortGenerate {// 数组private stati ...
- java最全基础知识_Java编程入门,选择排序(Selection Sort)怎么做?
表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好.唯一的好处可能就是不占用额外的内存空间了吧.理论上讲,选择排序可能也是平时排序一般人想到的 ...
- 简单选择排序(Simple Selection Sort)
介绍: 简单选择排序的工作方式突出"选择"二字,每次从待排序数据中选择符合条件的元素放在已排序元素末尾.对于少量元素的排序,简单选择排序是一个有效的算法. 思想: 第一次从待排序的 ...
- 选择排序(Selection Sort)
表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好.唯一的好处可能就是不占用额外的内存空间了吧.理论上讲,选择排序可能也是平时排序一般人想到的 ...
- 排序——选择排序(Selection sort)
算法思想 第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾.以此类推,直到全部待排序的数据元素的 ...
- DSA之十大排序算法第二种:Straight Selection Sort
直接选择排序 直接选择排序在我看来,是一种非常简单粗暴的方法.注:我们这里实现的所有排序算法,统一由小到大 C++实现. 排序步骤就是: 在这个无序的数列里面,每次都从中选择 或者 挑选最小的那个元素 ...
- 选择排序(Select Sort)
选择排序 每次从列表中选择一个最小的元素放到无序区的最前面 时间复杂度:O(n^2) def select_sort(li):for i in range(len(li)-1):min_loc = i ...
最新文章
- 随机森林c++_100天搞定机器学习|Day3334 随机森林
- 哈尔滨工业大学计算机培养计划,哈工大计算机科学与技术专业本科生培养方案.docx...
- ABAP:从例子学习ABAP
- html5 自制播放器
- Android 平板中 自己定义键盘(popuwindow) 居于屏幕左下方 仿微信的password输入界面...
- 《Python程序设计》实验指导书(30个实验)
- 2021了,你还不能玩转js正则表达式?
- Python中的两种路径
- MSSQL Server 2008 功能
- 世界上公认最快的学习法 - 弗曼学习法
- 微信认证小程序如何绑定微信支付商户平台
- 英特尔核显自定义分辨率_英特尔核芯显卡设置如何操作【图文】
- 如何在电脑上复制微信文章图片
- 程序猿适合的几部励志爱情电视剧
- Excel怎么批量在工作表名称后添加文本
- Java发送QQ邮件问题Could not connect to SMTP host: smtp.qq.com, port: 465(内附完整代码)
- 计算机本地连接没有有效ip配置,本地连接没有有效的ip配置?教您怎么解决
- 赢得面试 — 天助自助者
- 【1+X】等价类划分法
- 乘风广告联盟系统v6.6 官方版源码
热门文章
- 新写的一个商品比较控件CompareGrid,没有做设计视图。有兴趣的联络我。公布源码。...
- htmlspecialchars_decode 和 htmlspecialchars
- Sql Server 中 根据具体的值 查找该值所在的表和字段
- Just for fun--Linus
- 使用VS2019创建控制器时出现运行所选代码生成器时出错:“值-1超出了可接受的[0,2147483647]范围。参数名称:value”错误
- 滑块验证码Java实现
- 什么软件可以让头发变黑_头发特别干枯毛躁,请问什么方法可以让头发恢复到顺滑状态?...
- 如何做爬虫python在线观看_Python爬虫实战:利用scrapy,短短50行代码下载整站短视频...
- Java基础:红黑树概念
- 实战:基于服务端开发和前后端分离开发区别