Java 选择排序之简单选择排序

69 阅读1分钟

Java 选择排序之简单选择排序

  • 简单选择排序是一种简单直观的选择排序算法,属于比较类排序,通过多次遍历要排序的数组, 逐步选出未排序数组中最小(或最大)的元素,放在已排序数组的末尾,直到数组的所有元素排序完毕
  • 简单选择排序易于理解和实现,但效率较低(但通常要比冒泡排序稍微高一点)
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
  • 稳定性:不稳定
/**
待排序: 3 5 1 7 6 2 4
第 1 轮:1 5 3 7 6 2 4 确定 1
第 2 轮:1 2 3 7 6 5 4 确定 1 2
第 3 轮:1 2 3 7 6 5 4 确定 1 2 3
第 4 轮:1 2 3 4 6 5 7 确定 1 2 3 4
第 5 轮:1 2 3 4 5 6 7 确定 1 2 3 4 5
...
*/
public static void main(String[] args) {
    int[] arr = {3, 5, 1, 7, 6, 2, 4};
    //外层循环控制选择的轮数,每轮操作后,已排序数组长度增加一位,未排序数组减少一位
    for (int i = 0; i < arr.length - 1; i++) {
        //假设当前轮的最小元素索引为 i
        int minIndex = i;
        //内层循环在剩余未排序元素中查找最小值,找出从 i + 1 到数组末尾的最小元素的索引
        for (int j = i + 1; j < arr.length; j++) {
            if (arr[j] < arr[minIndex]) { //升序
                minIndex = j;
            }
        }
        //交换后第 i 个位置就放置了当前轮的最小元素
        int temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
    //
    System.out.println("排序后的数组:");
    for (int num : arr) {
        System.out.print(num + " ");
    }
}
//---------------------------------
排序后的数组:
1 2 3 4 5 6 7