前言
1.排序算法的分类
- 内部排序:
指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。 - 外部排序法:
数据量过大,无法全部加载到内存中,需要借助外部存储(文件等)进行排序。 - 常见的排序算法分类
一、选择排序的基本概念
1.基本介绍
选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。
2.执行逻辑
- 第一次从 arr[0]~arr[n-1]中选取最小值,与 arr[0]交换
- 第二次从 arr[1]~arr[n-1]中选取最小值,与 arr[1]交换
- 第三次从 arr[2]~arr[n-1]中选取最小值,与 arr[2]交换,…
- 第 i 次从 arr[i-1]~arr[n-1]中选取最小值,与 arr[i-1]交换,…
- 第 n-1 次从 arr[n-2]~arr[n-1]中选取最小值,与 arr[n-2]交换,总共通过 n-1 次,得到一个按排序码从小到大排列的有序序列。
二、图解
- 制作一个数组{3,44,38,5}
- 把3作为排序的的一个数。先与44比较,3小;再和38比较,3小;再和5比较,3小;第一轮结束
- 开始第二轮。第一个数已经确定为最小。把第二位的数44和38作比较,38小,记录38这个数。用38与5做比较,5小。5放到第二位,44放到最后一位。
- 同理直到前3位的顺序为有序。
- 动态图展示(开始状态全为蓝色条)
- 完成后的数据
三、举例代码说明
设置一个原始的数组{101, 34, 119, 1}使用选择排序算法
package com.datastructure.sort;
import java.util.Arrays;
/**
* @author Hacah
* @date 2020/9/29 20:47
*/
public class SelectSort {
public static void main(String[] args) {
// 定义数组
int[] arr = {101, 34, 119, 1};
// 选择排序
selectSort(arr);
// 打印结果
System.out.println(Arrays.toString(arr));
}
/**
* 选择排序
*
* @param arr 排序数组
*/
public static void selectSort(int[] arr) {
// 循环排序的次数
for (int i = 0; i < arr.length - 1; i++) {
// 设置临时变量存放最小的数和最小数的索引,开始假设为第i次循环的第一个数。
int minNum = arr[i];
int minIndex = i;
// 循环获取最小数,存放在临时变量里。
for (int j = 1 + i; j < arr.length; j++) {
if (minNum > arr[j]) {
minNum = arr[j];
minIndex = j;
}
}
// 交换数据
if (minIndex != i) {
arr[minIndex] = arr[i];
arr[i] = minNum;
}
System.out.println("第"+(i+1)+"次循环:"+Arrays.toString(arr));
}
}
}