1:选择排序
选择排序算法思想描述:
1、定义变量minIndex每次都指向全局最小值
2、从数组0位置开始,minIndex = 0,把1~N-1位置上的每一个数依次取出(用下标j指向)和minIndex位置的数比较,
如果取出的这个数arr[j]比arr[minIndex]的数小,更新minIndex = j,否则不变。这一轮结束,minIndex找到了整个数组[0 ~ N-1]
位置上的最小值,和arr[0]位置的数交换。这一步定好0位置的数。
3、从数组1位置开始,minIndex = 1,把2~N-1位置上的每一个数依次取出(用下标j指向)和minIndex位置的数比较,
如果取出的这个数arr[j]比arr[minIndex]的数小,更新minIndex = j,否则不变。这一轮结束,minIndex找到了整个数组[1 ~ N-1]
位置上的最小值,和arr[1]位置的数交换。这一步定好1位置的数。
3、从数组2位置开始,minIndex = 2,把3~N-1位置上的每一个数依次取出(用下标j指向)和minIndex位置的数比较,
如果取出的这个数arr[j]比arr[minIndex]的数小,更新minIndex = j,否则不变。这一轮结束,minIndex找到了整个数组[1 ~ N-1]
位置上的最小值,和arr[2]位置的数交换。这一步定好2位置的数。
4、重复循环步骤,
5、直到,从数组N-2位置开始,minIndex = N-2,把N-1位置上的数取出(用下标j指向)和minIndex位置的数比较,
如果取出的这个数arr[j]比arr[minIndex]的数小,更新minIndex = j,否则不变。这一轮结束,minIndex找到了整个数组[N-2 ~ N-1]
位置上的最小值,和arr[N-2]位置的数交换。这一步定好N-2位置数的同时,数组只剩最后1个数,自然N-1位置的这个数也排序好了。
1 public static void selectionSort(int[] arr) {
2 if (arr == null || arr.length < 2) { //baseCase,空数组或这有1个数的数组无需排序
3 return;
4 }
5 // 0 ~ N-2 找到最小值,在哪,放到0位置上
6 // 1 ~ n-2 找到最小值,在哪,放到1 位置上
7 // 2 ~ n-2 找到最小值,在哪,放到2 位置上
8 // ...
9 for (int i = 0; i < arr.length - 1; i++) {
10 int minIndex = i;
11 for (int j = i + 1; j < arr.length; j++) { // i ~ N-1 上找最小值的下标
12 minIndex = arr[j] < arr[minIndex] ? j : minIndex;
13 }
14 swap(arr, i, minIndex);
15 }
16 }
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决