【算法】3、十大排序之选择排序(Select Sort)

196 阅读1分钟

选择排序

在未排序序列中找到最小元素,存放到排序序列起始位置。再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。(或者每次在未排序的数组中找最大值,加入排序序列)

复杂度分析: 时间复杂度O(N^2),空间复杂度O(1)。

ab69a1575f6a449b8b3241a2a187b795.gif (图片来自CSDN博主Zandz_

 public class SelectionSort {
     public static void selectionSort(int[] arr) {
         int len = arr.length;
         for (int i = 0; i < len - 1; i++) {
             //每次都与后面比较,所以只需要循环到索引为len-2
             int minVal = i;  // 初始化最小值索引
             for (int j = i + 1; j < len; j++) {
                 if (arr[minVal] > arr[j]) {
                     minVal = j;
                 }
             }
             if (minVal != i) {
                 //最小值不是初始化值,则交换最小值与初始化值的位置
                 int tmp = arr[i];
                 arr[i] = arr[minVal];
                 arr[minVal] = tmp;
             }
         }
     }
 }