作为java排序算法中的一种经典的排序算法,选择排序的思想还是比较容易理解的,其主要的排序过程为:

  1. 每一趟从待排序记录中选出最小元素,顺序放在已排好序的最后,直到全部记录排序完毕。也就是:每一趟在n+1(i=1,2,…n)个记录中选取关键字最小记录作为有序数组中第i个记录,基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。(这里只介绍常用的简单选择排序)
  2. 简单选择排序的基本思想:给定数组:int[] arr={里面n个数据};第1趟排序,在待排序数据arr[1]arr[n]中选出最小的数据,将它与arrr[1]交换;第2趟,在待排序数据arr[2]arr[n]中选出最小的数据,将它与r[2]交换;以此类推,第i趟在待排序数据arr[i]~arr[n]中选出最小的数据,将它与r[i]交换,直到全部排序完成。
  3. 举例来说:数组 int[] arr={5,2,8,4,9,1};

-------------------------------------------------------
第一趟排序:
原始数据:5 2 8 4 9 1
最小数据1,把1放在首位,也就是1和5互换位置,
排序结果:1 2 8 4 9 5

-------------------------------------------------------

第二趟排序:
第1以外的数据{2 8 4 9 5}进行比较,2最小,
排序结果:1 2 8 4 9 5

-------------------------------------------------------

第三趟排序:
除1、2以外的数据{8 4 9 5}进行比较,4最小,8和4交换
排序结果:1 2 4 8 9 5

-------------------------------------------------------

第四趟排序:
除第1、2、4以外的其他数据{8 9 5}进行比较,5最小,8和5交换
排序结果:1 2 4 5 9 8

-------------------------------------------------------

第五趟排序:
除第1、2、4、5以外的其他数据{9 8}进行比较,8最小,8和9交换
排序结果:1 2 4 5 8 9

注:每一趟排序获得最小数的方法:for循环进行比较,定义一个第三个变量temp,首先前两个数比较,把较小的数放在temp中,然后用temp再去跟剩下的数据比较,如果出现比temp小的数据,就用它代替temp中原有的数据。具体参照后面的代码示例,这样的话,这里理解起来就特别容易了

下面有具体的代码实现,

public class SelectionSort {public static void main(String[] args) {int[] arr = {4,3,2,38,72,33,12};System.out.println("交换之前的数据:");System.out.print(Arrays.toString(arr));//选择排序优化for(int i= 0 ;i<arr.length-1;i++){     // 做第i趟排序int k = i;for(int j = k+1;j<arr.length;j++){   // 选最小的记录if(arr[j] < arr[k]){k = j;                         //记下目前找到的最小值所在的位置}}//内层循环结束后,也就是当找到本轮循环的最小数以后,再进行数据交换if(i != k){  //交换a[i]和a[k]int temp = arr[i];arr[i] = arr[k];arr[k] = temp;}    }System.out.println();System.out.println("排序后的数据:");System.out.print(Arrays.toString(arr));}
}

运行main函数,查看控制台的输出结果,说明排序后得到了预期的结果,

java数据结构之选择排序相关推荐

  1. 输入法按照选字频率排序的C语言程序算法,算法与数据结构之选择排序(C语言)...

    #include #include void SelectSort(int *a,int n);//预声明要调用的函数 int main(void) { int k; int x[]={,,,,,,, ...

  2. 数据结构 - 简单选择排序法

    数据结构 - 简单选择排序法 在之前的博文里已经介绍过排序的两个基本方法: 双重循环法和冒泡排序法. 基本思想 其实上面两种方法的基本思想都是一样的: 就是将排序步骤分成两层循环, 在内层的每1个循环 ...

  3. Java数据结构第一讲-排序算法

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

  4. java冒泡排序,选择排序,插入排序,希尔排序

    没两天又忘了,再写一遍. import java.util.Arrays;/*** Description:* Created by quxiaozha on 2018-9-1, 43, 567.*/ ...

  5. 数据结构-简单选择排序(C语言)

    文章目录 1.基本思想: 2.例子讲解: 3.代码实例C语言: 4.时间复杂度分析 1.基本思想: 第i趟排序开始时,当前有序区和无序区分别为R[0-i-1],R[i-n-1] (0<=i< ...

  6. 数据结构 - 树形选择排序 (tree selection sort) 具体解释 及 代码(C++)

    树形选择排序 (tree selection sort) 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 算法逻辑: 依据节点的大小, ...

  7. java 数据结构和算法 排序

    排序算法 排序算法的介绍 算法的时间复杂度 **度量一个程序(算法)执行时间的两种方法** **时间频度** **时间复杂度** **常见的时间复杂度** 平均时间复杂度和最坏时间复杂度 算法的空间复 ...

  8. Java基础语法——选择排序、冒泡排序以及二分查找法和Arrays类的使用

    本文将带你了解选择排序.冒泡排序以及二分查找法的原理和代码实现,以及通过Arrays类快速实现对数组的一些操作 文章目录 一.选择排序 二.冒泡排序 三.二分查找法 四.Arrays类(对数组的操作) ...

  9. 用Java玩转选择排序

    选择排序 算法原理 代码实现 选择排序总结: 选择排序 选择排序(Selection sort)是一种简单直观的排序算法.选择排序之所以叫选择排序就是在一次遍历过程中找到最小元素的角标位置,然后把它放 ...

最新文章

  1. vscode配置记录
  2. Evolview:提升系统进化树颜值
  3. undefined reference to 'pthread_create'问题解决
  4. java 自定义异常 未回滚_抛出自定义异常,spring AOP事务不回滚的解决方案
  5. 第 21 章 radiusd - Authentication, Authorization and Accounting server
  6. LoadRunner Interview Questions
  7. php htts cookies,Http和Https下的cookie的写入问题
  8. 白鹭引擎定时器代码实例
  9. Windows 键盘快捷键 : Windows 快捷键
  10. Oracle中用于发送邮件的存储过程
  11. C#基础知识-对象初始化顺序
  12. C++ ORM ODB入门
  13. python curl invalid syntax_将CURL Post转换为Python请求失败
  14. 笔记本电脑开机键盘失效
  15. 【ANSYS命令流】模型的建立相关命令(一)
  16. 水处理过滤器:常见水处理过滤器的种类大全
  17. C语言中结构体所占内存空间
  18. 程序员如何保护自己的头发
  19. Anaconda虚拟环境管理(命令行)
  20. enovia使用富文本小结

热门文章

  1. 作业6--四则运算APP之Sprint计划
  2. The requested URL /server-status was not found on this server
  3. HTML元素-META全集
  4. zt:tcpdump抓包对性能的影响
  5. loadrunner如何监控linux,以及重点指标分析
  6. 关于Char* ,CString ,WCHAR*之间的转换问题
  7. 100c之29:求具有abcd= ( ab + cd )^2 性质的四位数
  8. 问题解决 xenapp6/6.5发布资源管理器explorer应用不能打开 一闪而过
  9. pku773_Happy 2006
  10. 什么时候对象可以被收回?