校招必看攻略之-Java常见排序算法001之选择排序

Posted 星云IT技术分享

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了校招必看攻略之-Java常见排序算法001之选择排序相关的知识,希望对你有一定的参考价值。




我们在学习数组的时候讲过排序,大家在面试的时候也会经常遇到排序的问题,更有的公司在笔试的时候要求手写排序。那咱们今天就来看看排序的具体操作 。

排序算法可以分为内部排序和外部排序。

    内部排序是数据记录在内存中进行排序。

    外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。

常见的内部排序算法有:冒泡排序选择排序插入排序希尔排序快速排序归并排序等。

      所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。

      今天我们先来聊聊选择排序,后面我们会将常见的各种排序一一进行解释。

         

01


校招必看攻略之-Java常见排序算法001之选择排序


选择排序 


原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序本次我们主要以简单排序进行讲解

1.1 简单选择排序的基本思想

给定数组:int[] arr={里面n个数据};第1趟排序,在待排序数据arr[1]~arr[n]中选出最小的数据,将它与arrr[1]交换;第2趟,在待排序数据arr[2]~arr[n]中选出最小的数据,将它与r[2]交换;以此类推,第i趟在待排序数据arr[i]~arr[n]中选出最小的数据,将它与r[i]交换,直到全部排序完成。

1.2 过程演示 

举例:数组 int[] arr={5,2,8,4,9,1};

第一趟排序:原始数据:5  2  8  4  9  1

最小数据1,把1放在首位,也就是15互换位置,

排序结果:1  2  8  4  9  5

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

第二趟排序:

1以外的数据{2  8  4  9  5}进行比较,2最小,

排序结果:1  2  8  4  9  5

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

第三趟排序:

12以外的数据{8  4  9  5}进行比较,4最小,84交换

排序结果:1  2  4  8  9  5

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

第四趟排序:

除第124以外的其他数据{8  9  5}进行比较,5最小,85交换

排序结果:1  2  4  5  9  8

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

第五趟排序:

除第1245以外的其他数据{9  8}进行比较,8最小,89交换

排序结果:1  2  4  5  8  9

校招必看攻略之-Java常见排序算法001之选择排序




02



校招必看攻略之-Java常见排序算法001之选择排序



java代码的具体实现


基本思路:

    a、将第一个值看成最小值

  b、然后和后续的比较找出最小值和下标

  c、交换本次遍历的起始值和最小值

  d、说明:每次遍历的时候,将前面找出的最小值,看成一个有序的列表,后面的看成无序的列表,然后每次遍历无序列表找出最小值。

  e、代码实现

//使用junit单元测试 @Test void test() {
int arr[] = {15,2,9,14,6,3};
//选择 for (int i = 0; i < arr.length; i++) { //默认第一个是最小的。 int min = arr[i]; //记录最小的下标 int index = i; //通过与后面的数据进行比较得出,最小值和下标 for (int j = i + 1; j < arr.length; j++) { if (min > arr[j]) { min = arr[j]; index = j; } } //然后将最小值与本次循环的,开始值交换 int temp = arr[i]; arr[i] = min; arr[index] = temp; //说明:将i前面的数据看成一个排好的队列,i后面的看成一个无序队列。每次只需要找无需的最小值,做替换 } for (int i : arr) { System.out.print(i+" "); } }


运行结果  

校招必看攻略之-Java常见排序算法001之选择排序

 


校招必看攻略之-Java常见排序算法001之选择排序
End


审稿:Nebula xiaoxing

编辑:Nebula xiaoxing



校招必看攻略之-Java常见排序算法001之选择排序 

2020年6月29日星云科技暑期班如约而至

JAVA高级开发班、Linux云计算9月班火热预报名

咨询请联系吕老师:

Tel/VX:13992827407

QQ:54020094



*版权申明:

      转载文章和图片均来自公开互联网,版权归作者本人所有,推送文章除无法获取出处外,我们都会注明作者和来源,如有侵权,请与我们联系删除或授权。








以上是关于校招必看攻略之-Java常见排序算法001之选择排序的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript算法 ,Python算法,Go算法,java算法,系列之归并排序篇

JavaScript ,Python,Go,java,C#系列算法之插入排序篇

秋招必看! 面试数据挖掘/机器学习常见问题与解决思路?一文总结!

JavaScriptPythonjavaGo算法系列之快速排序篇

这8种常见的Java排序算法,学算法必看!

Java常见排序算法——直接插入排序