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 }
复制代码

 

posted @   yzmarcus  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示