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排序算法之直接选择排序相关推荐

  1. Java常见排序算法之直接选择排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  2. java选择排序代码_Java排序算法总结之选择排序

    本文实例讲述了Java排序算法总结之选择排序.分享给大家供大家参考.具体分析如下: 选择排序的基本操作就是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部 ...

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

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

  4. js排序算法详解-选择排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-选择排序 相对于冒泡排序还有一种类似的方法就是选择排序,顾名思义就是选择性排序,什么意思呢? 这么来理解,假设 ...

  5. 《数据结构与算法》实验:排序算法实验比较——选择排序 堆排序

    <数据结构与算法>实验和课程Github资源 <数据结构与算法>实验:线性结构及其应用--算术表达式求值 <数据结构与算法>实验:树型结构的建立与遍历 <数据 ...

  6. 排序算法六:选择排序之直接选择排序

    排序算法六:选择排序之直接选择排序 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言 在我的博文<"主宰世界"的10种算法短评& ...

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

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

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

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

  9. 常见的排序算法四——直接选择排序

    1.直接选择排序 原理:将序列划分为无序和有序区,寻找无序区中的最小值和无序区的首元素交换,有序区扩大一个,循环最终完成全部排序. 要点: 实现: Void SelectSort(Node L[]) ...

最新文章

  1. 02_计算机科学和软件工程的区别
  2. 页面置换算法简单对比----《operating system concepts》《操作系统原理》
  3. [转]阮一峰:蒙特卡罗方法入门
  4. JSP 调用java 常量 枚举
  5. 五十五、手把手教你从零到一,完成淘宝数据分析案例
  6. char 赋值 加入变量_王牌编程语言Java常量、变量、数据类型详解
  7. linux 模拟打电话,Android 调用打电话和发短信功能
  8. mybatis 多数据源_SpringBoot+Mybatis配置多数据源及事务方案
  9. 【历史上的今天】6 月 25 日:笔记本之父诞生;Windows 98 发布;通用产品代码首次商用
  10. java jbutton方法_java-如何设置JButton的大小?
  11. ORDER BY语句报错Out of sort memory, consider increasing server sort buffer size
  12. 中国劳动力动态调查数据(CLDS)2011-2018年
  13. JK触发器计算机符号,JK触发器
  14. Python正则表达式(菜鸡版)
  15. 装饰设计模式(Decorator degin pattern)
  16. 嵌入式Linux获取系统时间
  17. 使用VideoCapture进行读取时0x00007FF9A1F86A6F (opencv_world440d.dll)处(位于 opencvtest.exe 中)引发的异常
  18. [电路汇总] 强大、便捷的蓝牙技术应用方案分享
  19. Java新版本API发送新浪微博可能会出现的问题呢
  20. SpringBoot:开发工具加速重启项目的速度

热门文章

  1. python更新版本会丢失库吗_Python小技巧:如何批量更新已安装的库?
  2. 在哪里搜python题_robots文件生成
  3. java使double保留两位小数
  4. fastjson.toJSONString字段排序
  5. mysql一次运行多个SQL文件
  6. Mysql8报You need either to explicitly disable SSL by setting useSSL=false
  7. pycharm远程开发
  8. 浪潮科大讯飞Altera用OpenCL实现FPGA深度学习语音识别加速方案
  9. 微信支付 body不是UTF-8编码以及中文签名错误的问题
  10. 解决Fragment中使用ViewPager时,ViewPager里的Fragment错位和空白问题