跳至主要內容

选择排序

苏文广大约 2 分钟算法算法排序

选择排序

选择排序是一种简单直观的排序算法。它的基本思想是:每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

步骤

选择排序的算法步骤如下:

  1. 在待排序的元素中,找到最小(大)的元素,将其与第一个元素交换位置。
  2. 在剩下的元素中,找到最小(大)的元素,将其与第二个元素交换位置。
  3. 重复上述步骤,直到所有元素均排序完毕。

示例

给定数组 [3, 4, 2, 1, 5],按升序排序。

  1. 第一次遍历,找到最小元素 1,与第一个元素 3 交换位置,数组变为 [1, 4, 2, 3, 5]。
  2. 第二次遍历,忽略第一个元素,找到最小元素 2,与第二个元素 4 交换位置,数组变为 [1, 2, 4, 3, 5]。
  3. 第三次遍历,忽略前两个元素,找到最小元素 3,与第三个元素 4 交换位置,数组变为 [1, 2, 3, 4, 5]。
  4. 第四次遍历,忽略前三个元素,找到最小元素 4,与第四个元素 4 交换位置,数组保持不变 [1, 2, 3, 4, 5]。
  5. 第五次遍历,忽略前四个元素,找到最小元素 5,与第五个元素 5 交换位置,数组保持不变 [1, 2, 3, 4, 5]。

最终得到的数组为 [1, 2, 3, 4, 5],即为按升序排序后的结果。

时间复杂度

选择排序的时间复杂度为 O(n^2),其中 n 是待排序数组的长度。

代码实现

下面是使用 Java 实现选择排序的示例代码:

public class SelectionSort { 
    public static void main(String[] args) { 
        int[] arr = {3, 4, 2, 1, 5}; 
        selectionSort(arr); 
        System.out.println(Arrays.toString(arr)); // 输出:[1, 2, 3, 4, 5] 
    }
    public static void selectionSort(int[] arr) {
        int n = arr.length;

        // 遍历数组
        for (int i = 0; i < n-1; i++) {
            int minIndex = i;

            // 寻找最小元素的索引
            for (int j = i+1; j < n; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }

            // 交换最小元素与当前元素的位置
            int temp = arr[minIndex];
            arr[minIndex] = arr[i];
            arr[i] = temp;
        }
    }
}

以上代码实现了选择排序的排序算法和排序结果的输出。