一、基本思想

简单选择排序是最简单直观的一种算法,每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止,简单选择排序是不稳定排序。

在算法实现时,每一轮确定最小元素的时候会通过不断地比较交换来使得首位置为当前最小,交换是个比较耗时的操作。其实我们很容易发现,在还未完全确定当前最小元素之前,这些交换都是无意义的。

因此可以通过设置一个变量min,每一次比较出存储较小元素,并且记录当前元素的数组下标,当本轮循环结束之后,那这个变量min存储的就是当前最小元素的下标,此时再执行交换操作,以此确定本轮遍历的最小元素放到了数组前部。

二、算法分析

简单选择排序通过上面优化之后,无论数组原始排列如何,比较次数是不变的;对于交换操作,在最好情况下也就是数组完全有序的时候,无需任何交换移动,在最差情况下,也就是数组倒序的时候,交换次数为n-1次。综合下来,时间复杂度为O(n2)

三、编码实现

package sort;public class SelectSort {public static void main(String[] args) {//模拟数据int[] array = {52,63,14,59,68,35,8,67,45,99};System.out.println("原数组:");for (int i : array) {System.out.print(i+" ");}System.out.println();selectSort(array);System.out.println("排序后:");for (int i : array) {System.out.print(i+" ");}}public static void selectSort(int[] arr){for(int i = 0; i < arr.length-1; i++){int min = i;for(int j = i+1; j <arr.length ;j++){if(arr[j]<arr[min]){min = j;}}if(min!=i){swap(arr, i, min);}}}//完成数组两元素间交换public static void swap(int[] arr,int a,int b){int temp = arr[a];arr[a] = arr[b];arr[b] = temp;}
}

四、结果值查看

原数组:
52 63 14 59 68 35 8 67 45 99
排序后:
8 14 35 45 52 59 63 67 68 99 

选择排序详解(Java实现)相关推荐

  1. c语言选择排序详解及代码,C语言选择排序算法及实例代码

    选择排序是排序算法的一种,这里以从小到大排序为例进行讲解. 基本思想及举例说明 选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置:然后,选出第二小的数,放在第二个位置:以此类推,直 ...

  2. 水冒泡了几度_冒泡和选择排序详解

    排序 所谓排序,就是指将一组数据,按照特定规则调换位置,使数据具有某种顺序关系(递增或递减). 在排序过程中,数据的移动方式可分为直接移动和逻辑移动两种.直接移动是直接交换存储数据的位置,而逻辑移动并 ...

  3. 拓扑排序详解 Java 模版代码实现

    拓扑排序 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G), ...

  4. 十大排序详解(java实现)

    十大排序详解(java实现) 一.十大排序算法概述 1.定义 2.分类 3.比较 4.相关概念 二.各算法原理及实现 1.冒泡排序 2.简单选择排序(Selection Sort) 3.直接插入排序( ...

  5. 希尔排序基础java代码_java 算法之希尔排序详解及实现代码

    摘要:这篇Java开发技术栏目下的"java 算法之希尔排序详解及实现代码",介绍的技术点是"希尔排序详解.实现代码.希尔排序.Java.实现.代码",希望对大 ...

  6. java排序接口_详解JAVA使用Comparator接口实现自定义排序

    1.原则 Comparator接口可以实现自定义排序,实现Comparator接口时,要重写compare方法: int compare(Object o1, Object o2) 返回一个基本类型的 ...

  7. 第三节:带你详解Java的操作符,控制流程以及数组

    前言 大家好,我是 Vic,今天给大家带来带你详解Java的操作符,控制流程以及数组的概述,希望你们喜欢 操作符 算数操作符 一般的 +,-,*,/,还有两个自增 自减 ,以及一个取模 % 操作符. ...

  8. java 死锁 内存消耗_详解Java中synchronized关键字的死锁和内存占用问题

    先看一段synchronized 的详解: synchronized 是 java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并 ...

  9. java斐波那契查找_详解Java Fibonacci Search斐波那契搜索算法代码实现

    一, 斐波那契搜索算法简述 斐波那契搜索(Fibonacci search) ,又称斐波那契查找,是区间中单峰函数的搜索技术. 斐波那契搜索采用分而治之的方法,其中我们按照斐波那契数列对元素进行不均等 ...

  10. java comparator相等_详解Java中Comparable和Comparator接口的区别

    详解Java中Comparable和Comparator接口的区别 发布于 2020-7-20| 复制链接 摘记: 详解Java中Comparable和Comparator接口的区别本文要来详细分析一 ...

最新文章

  1. 微信企业号开启回调模式--php
  2. JAVA实现简单链表操作
  3. matlab2014调用vs2015进行混合编译生成mex文件
  4. mycat启动服务,后台日志报错Bit Server VM warning: ignoring option MaxPermSize
  5. 跨境电商如何选择并且下载专用浏览器?电商浏览器下载指南
  6. 大数据平台整体架构设计方案(PPT)
  7. 十大排序方法之基数排序
  8. 如何用循环执行玩转自定义企业微信机器人?
  9. 永不服输 学无止境
  10. 武林外传挂机宝宝 v1.0 怎么用
  11. k8s_day03_02
  12. 记kafka partition数据量过大导致不能正确重启
  13. audioread.NoBackendError
  14. MySQL 统计上一周从周一到周日的用户
  15. 计网实验c/c++ 电子邮件客户端程序实现发送接收邮件
  16. 3Dmax如何制作药箱模型
  17. 王者荣耀微信查看服务器地址大全,王者荣耀微信如何查找自己所在大区 | 手游网游页游攻略大全...
  18. Cadence Allegro如何输出贴片坐标文件?
  19. 论在开发中技术选型的重要性
  20. 计算机的硬件(计算机组成原理)

热门文章

  1. 代码片段:基于 JDK 8 time包的时间工具类 TimeUtil
  2. Delphi 正则表达式TPerlRegEx : Split 函数
  3. 图像处理和计算机视觉中的经典论文(转)
  4. 深度探索C++对象模型第一章第一节重点
  5. 无法将“node.exe”项识别为_CFA二级量化方法分析:线性回归假设的违反,识别与处理!...
  6. java远程方法调用(rmi)--好_java 远程方法调用(RMI)
  7. 幅度为a0的载波由峰峰值_【砂石骨料】机制砂亚甲蓝值对混凝土性能的影响研究...
  8. 拓端tecdat|数据挖掘算法在物业设备设施管理的风险识别与防控应用
  9. 解决 Manjaro 中 Linuxqq扫码登陆闪退问题
  10. JSP教程第5讲笔记