校招必看攻略之-Java常见排序算法001之选择排序
Posted 星云IT技术分享
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了校招必看攻略之-Java常见排序算法001之选择排序相关的知识,希望对你有一定的参考价值。
我们在学习数组的时候讲过排序,大家在面试的时候也会经常遇到排序的问题,更有的公司在笔试的时候要求手写排序。那咱们今天就来看看排序的具体操作 。
排序算法可以分为内部排序和外部排序。
内部排序是数据记录在内存中进行排序。
外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。
常见的内部排序算法有:冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序等。
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。
今天我们先来聊聊选择排序,后面我们会将常见的各种排序一一进行解释。
01
—
选择排序
原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一趟在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放在首位,也就是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
02
—
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+" ");
}
}
运行结果
审稿:Nebula xiaoxing
编辑:Nebula xiaoxing
2020年6月29日星云科技暑期班如约而至
JAVA高级开发班、Linux云计算9月班火热预报名
咨询请联系吕老师:
Tel/VX:13992827407
QQ:54020094
*版权申明:
转载文章和图片均来自公开互联网,版权归作者本人所有,推送文章除无法获取出处外,我们都会注明作者和来源,如有侵权,请与我们联系删除或授权。
以上是关于校招必看攻略之-Java常见排序算法001之选择排序的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript算法 ,Python算法,Go算法,java算法,系列之归并排序篇
JavaScript ,Python,Go,java,C#系列算法之插入排序篇
秋招必看! 面试数据挖掘/机器学习常见问题与解决思路?一文总结!