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)相关推荐

  1. 数据结构 - 树形选择排序 (tree selection sort) 具体解释 及 代码(C++)

    树形选择排序 (tree selection sort) 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 算法逻辑: 依据节点的大小, ...

  2. 选择排序(Selection sort)是一种简单直观的排序算法

    选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大 ...

  3. 算法:冒泡排序(Bubble Sort)、插入排序(Insertion Sort)和选择排序(Selection Sort)总结...

    背景 这两天温习了 5 中排序算法,之前也都看过它们的实现,因为没有深入分析的缘故,一直记不住谁是谁,本文就记录一下我学习的一些心得. 三种排序算法可以总结为如下: 都将数组分为已排序部分和未排序部分 ...

  4. 数据结构:选择排序(Selection sort)

    package com.sortbasic;import java.util.Random;public class SelectionSortGenerate {// 数组private stati ...

  5. java最全基础知识_Java编程入门,选择排序(Selection Sort)怎么做?

    表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好.唯一的好处可能就是不占用额外的内存空间了吧.理论上讲,选择排序可能也是平时排序一般人想到的 ...

  6. 简单选择排序(Simple Selection Sort)

    介绍: 简单选择排序的工作方式突出"选择"二字,每次从待排序数据中选择符合条件的元素放在已排序元素末尾.对于少量元素的排序,简单选择排序是一个有效的算法. 思想: 第一次从待排序的 ...

  7. 选择排序(Selection Sort)

    表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好.唯一的好处可能就是不占用额外的内存空间了吧.理论上讲,选择排序可能也是平时排序一般人想到的 ...

  8. 排序——选择排序(Selection sort)

    算法思想 第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾.以此类推,直到全部待排序的数据元素的 ...

  9. DSA之十大排序算法第二种:Straight Selection Sort

    直接选择排序 直接选择排序在我看来,是一种非常简单粗暴的方法.注:我们这里实现的所有排序算法,统一由小到大 C++实现. 排序步骤就是: 在这个无序的数列里面,每次都从中选择 或者 挑选最小的那个元素 ...

  10. 选择排序(Select Sort)

    选择排序 每次从列表中选择一个最小的元素放到无序区的最前面 时间复杂度:O(n^2) def select_sort(li):for i in range(len(li)-1):min_loc = i ...

最新文章

  1. 随机森林c++_100天搞定机器学习|Day3334 随机森林
  2. 哈尔滨工业大学计算机培养计划,哈工大计算机科学与技术专业本科生培养方案.docx...
  3. ABAP:从例子学习ABAP
  4. html5 自制播放器
  5. Android 平板中 自己定义键盘(popuwindow) 居于屏幕左下方 仿微信的password输入界面...
  6. 《Python程序设计》实验指导书(30个实验)
  7. 2021了,你还不能玩转js正则表达式?
  8. Python中的两种路径
  9. MSSQL Server 2008 功能
  10. 世界上公认最快的学习法 - 弗曼学习法
  11. 微信认证小程序如何绑定微信支付商户平台
  12. 英特尔核显自定义分辨率_英特尔核芯显卡设置如何操作【图文】
  13. 如何在电脑上复制微信文章图片
  14. 程序猿适合的几部励志爱情电视剧
  15. Excel怎么批量在工作表名称后添加文本
  16. Java发送QQ邮件问题Could not connect to SMTP host: smtp.qq.com, port: 465(内附完整代码)
  17. 计算机本地连接没有有效ip配置,本地连接没有有效的ip配置?教您怎么解决
  18. 赢得面试 — 天助自助者
  19. 【1+X】等价类划分法
  20. 乘风广告联盟系统v6.6 官方版源码

热门文章

  1. 新写的一个商品比较控件CompareGrid,没有做设计视图。有兴趣的联络我。公布源码。...
  2. htmlspecialchars_decode 和 htmlspecialchars
  3. Sql Server 中 根据具体的值 查找该值所在的表和字段
  4. Just for fun--Linus
  5. 使用VS2019创建控制器时出现运行所选代码生成器时出错:“值-1超出了可接受的[0,2147483647]范围。参数名称:value”错误
  6. 滑块验证码Java实现
  7. 什么软件可以让头发变黑_头发特别干枯毛躁,请问什么方法可以让头发恢复到顺滑状态?...
  8. 如何做爬虫python在线观看_Python爬虫实战:利用scrapy,短短50行代码下载整站短视频...
  9. Java基础:红黑树概念
  10. 实战:基于服务端开发和前后端分离开发区别