现在给大家讲一下java最基础的排序算法之一,也是必会的排序算法:选择排序,下面我先讲解选择排序的特点,在通过图片解析和代码解析帮组大家更好的理解.
1.概念
"选择排序"就是第0个逐步和后面全部的比,比完0位置就得到最小的数,紧接着再从1位置对比后面的元素,以此类推,逐步得到从小到大的值.
2.特点:
一.每次比当前位到后面的所有
1.第一轮:0位开始,比后面全部值,1轮后:得到最小值在0位置
2.第二轮:1位开始,比后面全部值,2轮后:得第2小在1位置
3.第二轮:2位开始,比后面全部值,3轮后:得第3小在2位置
4.第二轮:3位开始,比后面全部值,4轮后:得第4小在3位置
二.最终得到从左到右到大的值
3.图解原理:
int[] arr = { 4, 2, -6, 9, 1 }
4.代码详情
/**
* 选择排序
*
* 总思路:
* 1.每次比当前位到后面的所有
* 1.第一轮:0位开始,比后面全部值,1轮后:得到最小值在0位置
* 2.第二轮:1位开始,比后面全部值,2轮后:得第2小在1位置
* 3.第二轮:2位开始,比后面全部值,3轮后:得第3小在2位置
* 4.第二轮:3位开始,比后面全部值,4轮后:得第4小在3位置
* 2.最终得到从左到右到大的值
*
*/
public class Demo02 {
public static void main(String[] args) {
int[] arr = { 4, 2, -6, 9, 1 };// 角标0-4,length=5;
print(arr, "初始");
selectSort(arr);
print(arr, "结果");
}
private static void selectSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {// 效率-1 倒数第二个和倒数第一比
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
swap(arr, i, j); // 替换
}
}
print(arr, "第" + (i + 1) + "轮");
}
}
//替换方法
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//打印数组
private static void print(int[] arr, String str) {
for (int i = 0; i < arr.length; i++) {
if (i != arr.length - 1) {
if (i == 0) {
System.out.print("[" + arr[i] + ",");
} else {
System.out.print(arr[i] + ",");
}
} else {
System.out.println(arr[i] + "]" + "----" + str);
}
}
}
}
结果
[4,2,-6,9,1]----初始
[-6,4,2,9,1]----第1轮
[-6,1,4,9,2]----第2轮
[-6,1,2,9,4]----第3轮
[-6,1,2,4,9]----第4轮
[-6,1,2,4,9]----结果
5.总结
记住要点,0位置逐步比后面的角标得到最小值;再到1位置得到倒数第二小;同理分别得到从小到大的值.