9.4.1 简单选择排序算法

爱炒股票短线的人,总是喜欢不断的买进卖出,想通过价差来实现盈利。但通常这种频繁操作的人,即使失误不多,也会因为操作的手续费和印花税过高而获利很少。还有一种做股票的人,他们很少出手,只是在不断的观察和判断,等到时机一到,果断买进或卖出。他们因为冷静和沉着,以及交易的次数少,而最终收益颇丰。 
        冒泡排序的思想就是不断的在交换,通过交换完成最终的排序,这和做股票短线频繁操作的人是类似的。我们可不可以像只有在时机非常明确到来时才出手的股票高手一样,也就是在排序时找到合适的关键字再做交换,并且只移动一次就完成相应关键字的排序定位工作呢?这就是选择排序法的初步思想。
        选择排序的基本思想是每一趟在n-i+1(i=1,2,…,n-1)个记录中选取关键字最小的记录作为有序序列的第i个记录。我们这里先介绍的是简单选择排序法。
        简单选择排序法(Simple Selection Sort)就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1≤i≤n)个记录交换之。
        我们来看代码。

/* 对顺序表L作简单选择排序 */void SelectSort(SqList *L){int i,j,min;for(i=1;i<L->length;i++){ min = i;       /* 将当前下标定义为最小值下标 */for (j = i+1;j<=L->length;j++) /* 循环之后的数据 */{if (L->r[min]>L->r[j])  /* 如果有小于当前最小值的关键字 */min = j;     /* 将此关键字的下标赋值给min */}if(i!=min)      /* 若min不等于i,说明找到最小值,交换 */swap(L,i,min);    /* 交换L->r[i]与L->r[min]的值 */}}

代码应该说不难理解,针对待排序的关键字序列是{9,1,5,8,3,7,4,6,2},对i从1循环到8。当i=1时,L.r[i]=9,min开始是1,然后与j=2到9比较L.r[min]与L.r[j]的大小,因为j=2时最小,所以min=2。最终交换了L.r[2]与L.r[1]的值。如图9-4-2,注意,这里比较了8次,却只交换数据操作一次。

当i=2时,L.r[i]=9,min开始是2,经过比较后,min=9,交换L.r[min]与L.r[i]的值。如图9-4-3,这样就找到了第二位置的关键字。

当i=3时,L.r[i]=5,min开始是3,经过比较后,min=5,交换L.r[min]与L.r[i]的值。如图9-4-4。

之后的数据比较和交换完全雷同,最多经过8次交换,就可完成排序工作。

9.4.2 简单选择排序复杂度分析

从简单选择排序的过程来看,它最大的特点就是交换移动数据次数相当少,这样也就节约了相应的时间。分析它的时间复杂度发现,无论最好最差的情况,其比较次数都是一样的多,第i趟排序需要进行ni次关键字的比较,此时需要比较 次。而对于交换次数而言,当最好的时候,交换为0次,最差的时候,也就初始降序时,交换次数为n-1次,基于最终的排序时间是比较与交换的次数总和,因此,总的时间复杂度依然为O(n2)。
应该说,尽管与冒泡排序同为O(n2),但简单选择排序的性能上还是要略优于冒泡排序。

出处:http://www.cnblogs.com/cj723/archive/2011/04/18/2019536.html

《大话数据结构》第9章 排序 9.4 简单选择排序相关推荐

  1. java 排序原理_简单选择排序算法原理及java实现(超详细)

    简单选择排序的原理 简单选择排序的原理非常简单,即在待排序的数列中寻找最大(或者最小)的一个数,与第 1 个元素进行交换,接着在剩余的待排序的数列中继续找最大(最小)的一个数,与第 2 个元素交换.以 ...

  2. 排序算法:简单选择排序算法实现及分析

    简单选择排序算法介绍 简单选择排序(Simple Selection Sort)就是通过n-1次关键字排序之间的比较,从n-i+1个记录中选择关键字最小的记录,并和第i(1<=i<=n)记 ...

  3. 数据结构(八):排序 | 插入排序 | 希尔排序 | 冒泡排序 | 快速排序 | 简单选择排序 | 堆排序 | 归并排序 | 基数排序 | 外部排序 | 败者树 | 置换-选择排序 | 最佳归并树

    文章目录 第八章 排序 一.排序的基本概念 (一)什么是排序 (二)排序的应用 (三)排序算法的评价指标 (四)排序算法的分类 (五)总结 二.插入排序 (一)算法思想 (二)算法实现 (三)算法效率 ...

  4. 内部排序 (四):选择排序 Selection Sorting (简单选择排序、堆排序)

    作为数据结构的课程笔记,以便查阅.如有出错的地方,还请多多指正! 目录 简单选择排序 Simple Selection Sort 排序过程 算法实现 算法评价 T(n) S(n) 是否稳定 堆排序 H ...

  5. 两种选择排序算法:简单选择排序、堆排序

    一.简单选择排序 空间复杂度:O(1) 时间复杂度:O(n^2) 稳定性:不稳定 适用性:顺序表.链表 //简单选择排序 void SelectSort(int A[],int n){for(i=0; ...

  6. 排序算法-05简单选择排序(python实现)

    简单选择排序 概述 顾名思义,这是一种选择排序. 其步骤大致是,每一趟排序从待排记录中找到一个最小的关键字,放到已排序记录末尾,知道排序结束. 算法详解 首先,从待排记录中找到最小元素 如果最小元素不 ...

  7. 三种简单排序算法---冒泡排序,简单选择排序,直接插入排序

    冒泡排序 核心思想:类似水泡一样,一趟比较,通过相邻元素的交换,冒出当前序列的最小值(最大值)到相应位置 复杂度分析 最好的情况:序列本身有序,只要进行n-1次比较,无需交换,时间复杂度为O(n) 最 ...

  8. 排序算法5——简单选择排序

    选择排序就是从待排序的元素中选择最小(最大)的元素,将其放在有序序列的相应位置,使这些元素构成有序序列.选择排序主要有两种:简单选择排序和堆排序. [简单选择排序] 编写算法,要求使用简单选择排序算法 ...

  9. 【排序算法】简单选择排序及实例_C语言代码实现_Python代码实现

    博客对您有所帮助的话,欢迎给个赞啦,你的鼓励是对我最大的支持! 有不足之处也请您评论指教 简单选择排序 简单选择排序是选择排序的一种. 问:那么什么是选择排序? 答:每趟从待排序的记录中选出关键字最小 ...

最新文章

  1. this.name=name;和this.setName(name);的区别
  2. day38 19-Spring整合web开发
  3. 通用寄存器:地址指针寄存器,数据寄存器,变址寄存器
  4. 10突然只剩下c盘和d盘了_科普:为什么软件不能装C盘?会卡!这是真的吗?
  5. 从实验室搬到宿舍后可以上QQ但打不开网页
  6. python 实例化对象_python如何实例化对象
  7. 软件测试基础 (一): 单元测试
  8. 在Android Studio 中使用Assets资源文件
  9. Python学习(52周存钱)
  10. linux 使用icc运行tcl,Tcl在ICC2中的应用:定义一个proc,实现将一个cell直接替换成另一个功能不等价的cell...
  11. 如何用邮件群发软件发邮件到对方的信箱里
  12. Linux服务管理之unit的概念
  13. 电源滤波为何通常是一大一小两个电容并联?
  14. 029:vue+openlayers:使用MVT格式读取瓦片数据(示例代码)
  15. pytorch网络知识点四_thop计算Parameter和FLOPs,__all__的作用, GFLOPs =? GMacs
  16. C51中的INTRINS.H:内部函数
  17. 录屏成gif的神器小工具 GifCam
  18. 深度学习与自然语言处理第五次作业——段落分析模型
  19. 真爱趁现在电视剧全集在线观看 html,真爱趁现在
  20. 机器学习---特征选择

热门文章

  1. jvm性能调优 - 05对象在JVM内存中的分配和流转
  2. 深入理解分布式技术 - 分布式缓存总结回顾
  3. Redis-06Redis数据结构--集合Set
  4. 实战SSM_O2O商铺_37【商品】商品列表之View层的实现
  5. Spring-国际化信息01-基础知识
  6. web开发的java语言步骤_java web开发入门一(servlet和jsp)基于eclispe
  7. python多线程实现访问页面_python 多线程实现网页自动截图
  8. c# string 转 datetime_C#判断语句详解(if、if-else、switch-case、三目/元运算符)
  9. oracle 分布键,DWS使用技巧:根据ORACLE主键和唯一健批量修改DWS分布列字段的方法...
  10. 战神笔记本电脑自带access吗_双·12超值价 十代酷睿+GTX1650游戏本只卖4219元_神舟 战神Z7M-CU5NB_笔记本新闻...