当前位置: 首页 > news >正文

算法学习总结(二):选择排序

一、算法简介

      每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。

二、算法描述

  n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:

       1、初始状态:无序区为R[1..n],有序区为空。

       2、第i趟排序(i=1,2,3...n-1)

  第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

       3、前n-1趟结束,数组有序化了

      选择排序的交换操作介于0和(n-1)次之间。选择排序的比较操作为n(n-1)/2次之间。选择排序的赋值操作介于0和3(n-1)次之间。比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+...+1=n*(n-1)/2。 交换次数O(n),最好情况是,已经有序,交换0次;最坏情况是,逆序,交换n-1次。 交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。

最差时间复杂度O(n^2)
最优时间复杂度O(n^2)
平均时间复杂度O(n^2)
最差空间复杂度总共O(n),需要辅助空间O(1)

 

三、算法图解

四、示例代码

 public class SelectSort {
//选择排序
	public static void selectSort(int[] arr) {
		if (arr == null || arr.length < 2) {
			return;
		}
		int mini = 0;
		for (int i = 0; i < arr.length - 1; i++) {
			mini = i;
			for (int j = i + 1; j < arr.length; j++) {
				mini = arr[mini] > arr[j] ? j : mini;
			}
			swap(arr, i, mini);
		}
	}
        //交换两个元素的顺序
	public static void swap(int[] arr, int index1, int index2) {
		int tmp = arr[index1];
		arr[index1] = arr[index2];
		arr[index2] = tmp;
	}
}
 
 

 

转载于:https://www.cnblogs.com/gugibv/p/5695374.html

相关文章:

  • POJ - 1287 Networking
  • 【iOS】Jenkins Gitlab持续集成打包平台搭建
  • MySQL性能优化的最佳21条经验【转载】
  • 游戏引擎
  • Python的pip安装
  • 电Call记录统计查询sql
  • 数组操作
  • input输入类型
  • 连接优化查询,按条件查询的时候,如何优化查询的时间
  • 如何使用Enum
  • PHP.ini中配置屏蔽错误信息显示和保存错误日志
  • 设计模式的学习
  • 仿苹果原生头部动画
  • gdb用法
  • opencv3.0.1 中的SurfFeaturesFinderGpu类的问题.
  • JavaScript函数式编程(一)
  • Java面向对象及其三大特征
  • js操作时间(持续更新)
  • October CMS - 快速入门 9 Images And Galleries
  • SSH 免密登录
  • vue 个人积累(使用工具,组件)
  • windows下mongoDB的环境配置
  • 基于 Babel 的 npm 包最小化设置
  • 简单基于spring的redis配置(单机和集群模式)
  • 模型微调
  • 前端技术周刊 2019-01-14:客户端存储
  • 算法---两个栈实现一个队列
  • PostgreSQL之连接数修改
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • (python)数据结构---字典
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (转)一些感悟
  • .naturalWidth 和naturalHeight属性,
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net 4.0发布后不能正常显示图片问题
  • .Net 8.0 新的变化
  • .net操作Excel出错解决
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @ModelAttribute 注解
  • @SentinelResource详解
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • []C/C++读取串口接收到的数据程序
  • [16/N]论得趣
  • [20150321]索引空块的问题.txt
  • [2018-01-08] Python强化周的第一天
  • [28期] lamp兄弟连28期学员手册,请大家务必看一下
  • [Angularjs]ng-select和ng-options
  • [C++]Leetcode17电话号码的字母组合
  • [ChromeApp]指南!让你的谷歌浏览器好用十倍!
  • [COGS 622] [NOIP2011] 玛雅游戏 模拟
  • [ffmpeg] x264 配置参数解析
  • [js] 正则表达式