Java排序算法之直接选择排序
Java排序算法之直接选择排序
基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上。第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,....,第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。
Java代码实现:
public class Xuanze {public static void main(String[] args) {int [] s = {8,3,2,1,7,4,6,5};int temp = 0;for(int i=0;i<s.length-1;i++){for(int j=i+1;j<s.length;j++){if(s[i]>s[j]){temp=s[i];s[i]=s[j];s[j]=temp;}}}for(int value:s)System.out.print(value); } }
上面排序方法存在效率问题。因为当我们发现当前数比被比较数小的时候我们就交换两个数,其实我们可以把当前数的位置保存下来,等到第一次比较完后在进行交换。
public class Xuanze {public static void main(String[] args) {int [] s = {8,3,2,1,7,4,6,5};int temp = 0;for(int i=0;i<s.length-1;i++){temp = i;for(int j=i+1;j<s.length;j++){if(s[temp]>s[j]){temp=j; //保存位置 }}if(temp!=i) exchang(s,i,temp); //进行交换 }for(int value:s)System.out.print(value); }private static void exchang(int[] s, int i, int j) {int temp = s[j];s[j]=s[i];s[i]=temp; } }
算法性能分析:
时间复杂度:假设有n个数据,数据交换的次数最多为n-1次,但程序的总体的比较次数较多。所以综合考虑有直接选择排序的时间复杂度为O(n2)
(n的平方)。所以当记录占用字节数较多时,通常比直接插入排序的执行速度快些。
空间复杂度:直接选择排序的空间复杂度很好,它只需要一个附加单元用于数据交换,所以其空间复杂度为O(1)。
稳定性:在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么 交换后稳定性就被破坏了。举个例子,序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。
转载于:https://www.cnblogs.com/love-Stefanie/p/6636342.html
Java排序算法之直接选择排序相关推荐
- Java常见排序算法之直接选择排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- java选择排序代码_Java排序算法总结之选择排序
本文实例讲述了Java排序算法总结之选择排序.分享给大家供大家参考.具体分析如下: 选择排序的基本操作就是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部 ...
- 排序算法:简单选择排序算法实现及分析
简单选择排序算法介绍 简单选择排序(Simple Selection Sort)就是通过n-1次关键字排序之间的比较,从n-i+1个记录中选择关键字最小的记录,并和第i(1<=i<=n)记 ...
- js排序算法详解-选择排序
全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-选择排序 相对于冒泡排序还有一种类似的方法就是选择排序,顾名思义就是选择性排序,什么意思呢? 这么来理解,假设 ...
- 《数据结构与算法》实验:排序算法实验比较——选择排序 堆排序
<数据结构与算法>实验和课程Github资源 <数据结构与算法>实验:线性结构及其应用--算术表达式求值 <数据结构与算法>实验:树型结构的建立与遍历 <数据 ...
- 排序算法六:选择排序之直接选择排序
排序算法六:选择排序之直接选择排序 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言 在我的博文<"主宰世界"的10种算法短评& ...
- 排序算法系列:选择排序算法
概述 这是一个相对简单的排序算法.为什么这么说呢?因为不需要什么思考,你就可以掌握并使用它. 版权说明 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 本文作者:Q-WHai ...
- 排序算法-05简单选择排序(python实现)
简单选择排序 概述 顾名思义,这是一种选择排序. 其步骤大致是,每一趟排序从待排记录中找到一个最小的关键字,放到已排序记录末尾,知道排序结束. 算法详解 首先,从待排记录中找到最小元素 如果最小元素不 ...
- 常见的排序算法四——直接选择排序
1.直接选择排序 原理:将序列划分为无序和有序区,寻找无序区中的最小值和无序区的首元素交换,有序区扩大一个,循环最终完成全部排序. 要点: 实现: Void SelectSort(Node L[]) ...
最新文章
- 02_计算机科学和软件工程的区别
- 页面置换算法简单对比----《operating system concepts》《操作系统原理》
- [转]阮一峰:蒙特卡罗方法入门
- JSP 调用java 常量 枚举
- 五十五、手把手教你从零到一,完成淘宝数据分析案例
- char 赋值 加入变量_王牌编程语言Java常量、变量、数据类型详解
- linux 模拟打电话,Android 调用打电话和发短信功能
- mybatis 多数据源_SpringBoot+Mybatis配置多数据源及事务方案
- 【历史上的今天】6 月 25 日:笔记本之父诞生;Windows 98 发布;通用产品代码首次商用
- java jbutton方法_java-如何设置JButton的大小?
- ORDER BY语句报错Out of sort memory, consider increasing server sort buffer size
- 中国劳动力动态调查数据(CLDS)2011-2018年
- JK触发器计算机符号,JK触发器
- Python正则表达式(菜鸡版)
- 装饰设计模式(Decorator degin pattern)
- 嵌入式Linux获取系统时间
- 使用VideoCapture进行读取时0x00007FF9A1F86A6F (opencv_world440d.dll)处(位于 opencvtest.exe 中)引发的异常
- [电路汇总] 强大、便捷的蓝牙技术应用方案分享
- Java新版本API发送新浪微博可能会出现的问题呢
- SpringBoot:开发工具加速重启项目的速度
热门文章
- python更新版本会丢失库吗_Python小技巧:如何批量更新已安装的库?
- 在哪里搜python题_robots文件生成
- java使double保留两位小数
- fastjson.toJSONString字段排序
- mysql一次运行多个SQL文件
- Mysql8报You need either to explicitly disable SSL by setting useSSL=false
- pycharm远程开发
- 浪潮科大讯飞Altera用OpenCL实现FPGA深度学习语音识别加速方案
- 微信支付 body不是UTF-8编码以及中文签名错误的问题
- 解决Fragment中使用ViewPager时,ViewPager里的Fragment错位和空白问题