选择类排序的主要动作是“选择”,直接选择排序采用最简单的选择方式,从头至尾顺序扫描序列,找出最小的一个记录,和第一个记录交换,接着从剩下的记录中继续这种选择和交换,最终使序列有序


直接选择排序算法思想(以从小到大为例):

1、从第一个元素开始,选出一个最小的元素与第一个元素互换;
2、继续从第二个元素开始,向后选出最小的元素,与第二个元素互换;
3、依次循环执行,直到最大的元素放在了最后一个位置上,排序完成。


直接选择排序基本算法实现如下:

void selectSort1(int[] a, int n){int temp;for(int i = 0;i < n;i++){for(int j = i + 1;j < n;j++){//从第一个元素开始依次与后面的元素进行比较if(a[i] > a[j]){temp = a[i];a[i] = a[j];a[j] = temp;}}}}

改进直接选择排序:

在排序中我们应该尽量避免较多和元素互换的操作,而这里每比较一次,如果遇到更小的,就要进行一次元素互换。为了减少元素互换操作,我们可以在每次比较之后不直接进行交换,将较小的元素的位置序号记录下来,这样一趟比较之后,就会得到最小的元素的位置,如果最小值的位置发生了改变,再将该位置的元素与第一个元素互换,以此类推,这样,每一趟比较完成之后最多只需执行一次元素互换。


java代码实现如下:

public class SelectSort {public static void main(String[] args) {int[] a = {5,3,9,6,8,1,0,2};selectSort1(a,8);for (int i = 0; i < a.length; i++) {System. out.println(a[i]);}System. out.println("*********" );int[] b = {5,3,9,6,8,1,0,2};selectSort2(b, 8);for (int i = 0; i < b.length; i++) {System. out.println(b[i]);}}//直接选择排序基本实现public static void selectSort1(int[] a, int n){int temp;for(int i = 0;i < n;i++){for(int j = i + 1;j < n;j++){//从第一个元素开始依次与后面的元素进行比较if(a[i] > a[j]){temp = a[i];a[i] = a[j];a[j] = temp;}}}}//改进直接选择排序public static void selectSort2(int[] a, int n){int min,temp;//记录最小值的位置for(int i = 0;i < n;i++){//用来记录每一趟比较的最小值的位置min = i;for(int j = i + 1;j < n;j++){//如果遇到更小的值,则更新最小值位置记录if(a[j] < a[min]){min = j;}}//如果最小值的位置发生变化,则在最后执行一次元素互换if(min != i){temp = a[i];a[i] = a[min];a[min] = temp;}}}}

时间复杂度O(n2){n的平方},空间复杂度O(1)。

【大话数据结构算法】直接选择排序相关推荐

  1. 【大话数据结构算法】希尔排序

    希尔排序的实质就是分组插入排序,该方法又称为缩小增量排序. 直接插入排序适合于序列基本有序的情况,希尔排序的每趟排序都会使整个序列变得更加有序,等整个序列基本有序了,再来一趟直接插入排序,这样会使排序 ...

  2. 数据结构与算法:选择排序

    数据结构与算法:选择排序 雪柯 大工生物信息 提笔为写给奋进之人 已关注 8 人赞同了该文章 引用自算法图解,作者[美] Aditya Bhargava 译袁国忠 特别备注:本书非原创,但部分内容自己 ...

  3. 数据结构与算法之选择排序

    数据结构与算法之选择排序 目录 基本介绍 选择排序思想 代码实现 1. 基本介绍 选择排序也属于内部排序法,是从排序的数据中,按指定的规则选出某一元素,再依次交换位置后达到排序的目的 2. 选择排序思 ...

  4. 排序---初级排序算法(选择排序、插入排序和希尔排序)

    写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera  Algorithms Part1&2 本文 ...

  5. 函数模板案例_利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试

    案例描述: 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试 #include <iostream& ...

  6. 排序算法 | 直接选择排序,算法的图解、实现、复杂度和稳定性分析

    排序算法 | 直接选择排序,算法的图解.实现.复杂度和稳定性分析 目录 1.直接选择排序的原理 2.图解直接选择排序 3.算法代码实现 4.算法复杂度分析.稳定性分析 直接选择排序 1.直接选择排序的 ...

  7. 堆排序算法c语言筛选法,【排序】排序算法之选择排序

    排序算法之选择排序 罗朝辉(http://www.cppblog.com/kesalin) 转载请注明出处 排序是数据处理中经常使用的一种重要运算,在计算机及其应用系统中,花费在排序上的时间在系统运行 ...

  8. C++算法之选择排序

    C++算法之选择排序 文章目录 C++算法之选择排序 一.选择排序 二.题目 1.明明的随机数 2.代码 三.复杂度分析 一.选择排序 选择排序(Selection Sort)是我们学习的第一个排序算 ...

  9. 【排序算法】选择排序(Selection sort)

    选择排序(Selection sort)是一种简单直观的排序算法. 选择排序介绍 它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置:接着,再从剩余未排序的元 ...

  10. 排序算法(3)选择排序

    排序算法(3)选择排序 原理:思想:两个变种(1)单侧选择:在一个无序数组中选择出每一轮中最大值(或最小值)元素,放到最前面或最后面(升序)(2)双向选择:在一个无序数组中选择出每一轮中最值元素,然后 ...

最新文章

  1. c++获取可用端口号_PG高可用架构实施方案
  2. redhat 6.0 Enterprise企业版如何使用yum安装软件
  3. 2013年十大IT发展趋势预测
  4. java 正则 捕获_Java通过正则表达式捕获组中的文本
  5. Makefile与Shell的问题
  6. 3.JAVA基础复习——JAVA中的类与对象
  7. php web mysql数据库_使用php从web访问mysql
  8. python爬虫本科容易找工作吗_python爬虫基础学完了,我真的能找到一份工作吗?...
  9. ubuntu安装cuda11.2
  10. HAV-down1.1vs 大黄峰资源搜索 绿色特别版
  11. MyBatis 从认识到环境搭建
  12. 关于开发板ping不通主机,360安全卫士阻拦
  13. ios10 上下黑边问题
  14. 【图像增强】Frangi滤波器血管图像增强【含Matlab源码 2108期】
  15. Java代码导出数据库百万数据生成sql脚本
  16. 双屏显示器,扩展显示,笔记本清晰,扩展显示屏模糊的解决办法
  17. java 骰子游戏_java 骰子游戏
  18. 在Python中使用Turtle库画“蜂窝状六边形”
  19. 插入页眉和页脚-----------毕业设计必备攻略
  20. UE4 Unlua源码解析12 - Lua与UE4的混合GC

热门文章

  1. Raid5.h注释翻译
  2. solaris 10 安装Apache Mysql PHP
  3. 读:[你必须知道的.NET] 第五回:深入浅出关键字---把new说透
  4. mongodb 索引建立问题
  5. 转发一份GoldenGate 配置文档,里面有参数说明,值得看
  6. Android 4.0 截屏(Screenshot)代码流程小结
  7. Android Studio:64K问题com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
  8. Application Cache manifest 的处理 (Webkit)
  9. 卷积神经网络(Convolutional Neural Networks,CNNS/ConvNets)
  10. Core-3399-JD4 六核高性能AI核心板