概念

每次旅行到最后n-i+1(i=1,2,...,n-1)取纪录最年轻的排序列表i记录

动态效果:

长处:算法简单,easy实现

缺点:每次仅仅能确定一个元素


Java实现:

package com.liuhao.sort;import java.util.Arrays;//定义一个数据包装类
class DataWrap implements Comparable<DataWrap>{int data;String flag;public DataWrap(int data, String flag) {this.data = data;this.flag = flag;}public String toString(){return data + flag;}@Overridepublic int compareTo(DataWrap dw) {return this.data > dw.data ?1 : (this.data == dw.data ?

0 : -1); } } public class SelectSort { public static void selectSort(DataWrap[] data){ System.out.println("開始排序"); int arrayLength = data.length; //依次进行n-1次比較。第i趟比較将第i大的值选出放在i位置上 for(int i=0; i<arrayLength-1; i++){ for(int j=i+1; j<arrayLength; j++){ //i上的数据>j上的数据 if(data[i].compareTo(data[j]) > 0){ DataWrap tmp = data[i]; data[i] = data[j]; data[j] = tmp; } } System.out.println("第" + (i+1) + "趟排序后:" + Arrays.toString(data)); } } public static void main(String[] args) { DataWrap[] data = { new DataWrap(21, "") ,new DataWrap(30, "") ,new DataWrap(49, "") ,new DataWrap(30, "*") ,new DataWrap(16, "") ,new DataWrap(9, "") }; System.out.println("排序之前:" + Arrays.toString(data)); selectSort(data); System.out.println("排序之后:" + Arrays.toString(data)); } }

执行上面的程序,能够看出下图的排序效果:

直接选择排序每趟仅仅需选出最小的数据。并将其放在本趟首位就可以。能够发现。事实上每趟仅仅需进行一次交换就可以。而上述算法在每趟的比較中,进行了不止一次的交换。


改进算法:

//依次进行n-1次比較。第i趟比較将第i大的值选出放在i位置上for(int i=0; i<arrayLength-1; i++){//minIndex用于保留本趟中最小值的索引int minIndex = i;for(int j=i+1; j<arrayLength; j++){//i上的数据>j上的数据if(data[minIndex].compareTo(data[j]) > 0){minIndex = j;}}if(minIndex != i){DataWrap tmp = data[i];data[i] = data[minIndex];data[minIndex] = tmp;}System.out.println("第" + (i+1) + "趟排序后:" + Arrays.toString(data));}

每趟比較的目的是找出本趟中最小数据的索引(minIndex)。


算法分析

对于直接选择排序,数据交换的次数最多要n-1次,但比較的次数较多,时间复杂度为O(n2),空间复杂度仅为O(1)。

从上面两个data至30的DataWrap排序结果,,直接选择排序是不稳定。


版权声明:本文博客原创文章,博客,未经同意,不得转载。

直接选择排序算法汇总相关推荐

  1. 动图图解C语言选择排序算法,含代码分析

    C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...

  2. 终于,把十大经典排序算法汇总了!(Java实现版)

    转载自  终于,把十大经典排序算法汇总了!(Java实现版) 最近几天在研究排序算法,看了很多博客,发现网上有的文章中对排序算法解释的并不是很透彻,而且有很多代码都是错误的,例如有的文章中在" ...

  3. 排序算法汇总(C/C++实现)

    前言:     本人自接触算法近2年以来,在不断学习中越多地发觉各种算法中的美妙.之所以在这方面过多的投入,主要还是基于自身对高级程序设计的热爱,对数学的沉迷.回想一下,先后也曾参加过ACM大大小小的 ...

  4. java常用的7大排序算法汇总

    这段时间闲了下来,就抽了点时间总结了下java中常用的七大排序算法,希望以后可以回顾! 1.插入排序算法 插入排序的基本思想是在遍历数组的过程中,假设在序号 i 之前的元素即 [0..i-1] 都已经 ...

  5. 选择排序算法实现思想个人理解

    一.选择排序算法个人理解 如果有N个元素需要排序,首先从N个元素中找到最小的那个元素,然后与索引ix=0位置上的元素进行交换(如果没有比原来索引ix=0位置上的元素小就不用交换),接着再从剩下的N-1 ...

  6. 选择排序算法(基于Java实现)

    title: 选择排序算法(基于Java实现) tags: 选择算法 选择排序算法原理及代码实现: 一.选择排序算法的原理 选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间.但是选择 ...

  7. python 选择排序算法

    一.选择排序(selection sort) 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位 ...

  8. 选择排序算法,只需这篇文章就够了

    一.说在前面 一直想写一些简单易懂的文章,因为平时看的很多的书籍或者文章都是看着很难受的感觉,当然,这并不是说书籍写的不好,只是说对于一些没有太多基础或者基础不是很好的来说,相对来说还是比较难以理解的 ...

  9. 排序算法系列:选择排序算法

    概述 这是一个相对简单的排序算法.为什么这么说呢?因为不需要什么思考,你就可以掌握并使用它. 版权说明 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 本文作者:Q-WHai ...

最新文章

  1. 有漏洞无作为才可怕、可耻!
  2. python应用于财务-用6行python代码做一个财务机器人
  3. SpringBoot学习之@Configuration注解和@Bean注解
  4. MySQL—表的完整性约束(外键约束)(二)
  5. C++新旧类型转换小记
  6. 相似图像识别检 —基于图像签名(LSH)
  7. [翻译]“LINQ to Objects”提供程序是否内置性能优化?
  8. JAVASE阶段流程图
  9. 2345王牌浏览器网页加载慢怎么办 网页加载慢解决办法
  10. python操作excel命令_python操作Excel读写(使用xlrd和xlrt)[转帖]
  11. php在页面中实现累加,小白问个php累加问题
  12. 数据结构思维 第十二章 `TreeMap`
  13. css中的段落控制 【 text-indent】
  14. 使用CSS创建Digg样式风格的导航栏或菜单
  15. python实现多进程监听声音播放并绘图
  16. 机顶盒天线接头怎么接_户户通天线怎么安装图解
  17. HTTP代理原理探索
  18. JZOJ5773 简单数学题
  19. java网页作业提交_基于JAVA网上作业提交批改系统的设计(SQL)(含录像)
  20. git学习之时光穿梭机

热门文章

  1. 参数过滤mongodb过滤查询键值
  2. [原创]FineUI秘密花园(二十六) — 选项卡控件概述
  3. SWFUpload控件使用
  4. 跨国IT服务提供商 Inetum 遭勒索攻击
  5. 英国政府寻求在2022年成为“全球性网络力量”
  6. easyui的datagrid的editor为combobox,根据每个row的属性的不同,如何动态的设置每个row的combobox的url...
  7. 在互联网时代如何工作得更简单
  8. OpenGL 自制API gluPerspective
  9. 假期要如何过才有意义
  10. linux驱动基础开发0——linux 设备驱动概述-转