选择排序详解
1. 引言
选择排序是一种简单直观的排序算法,其核心思想是通过多次遍历数组,在每轮遍历中选择未排序部分的最小元素并将其放置到已排序部分的末尾。
2. 选择排序原理
选择排序的基本思路是通过不断选择最小的元素,逐步构建有序序列。在每一轮遍历中,找到未排序部分的最小元素,并与未排序部分的第一个元素交换位置,将其纳入已排序的部分。
3. 选择排序步骤
选择排序的具体步骤如下:
- 在未排序部分选择最小元素。
- 将最小元素与未排序部分的第一个元素交换位置,将其纳入已排序部分。
- 重复以上步骤,直至整个数组有序。
4. 选择排序代码
4.1 Python选择排序代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| def selection_sort(arr): n = len(arr)
for i in range(n): min_index = i
for j in range(i+1, n): if arr[j] < arr[min_index]: min_index = j
arr[i], arr[min_index] = arr[min_index], arr[i]
arr = [64, 34, 25, 12, 22, 11, 90] selection_sort(arr) print("排序后的数组:", arr)
|
4.2 Java选择排序代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| package org.example; import java.util.Arrays; public class SelectSort { public static void main(String[] args) { int arr[] = {-1, -2, 3, 7, 4, 10}; System.out.println("排序前:" + Arrays.toString(arr)); selectSort(arr); } public static void selectSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) { int minIndex = i; int min = arr[i]; for (int j = i + 1; j < arr.length; j++) { if (min > arr[j]) { min = arr[j]; minIndex = j; } } if (minIndex != i) { arr[minIndex] = arr[i]; arr[i] = min; } System.out.printf("第%d轮:",i + 1); System.out.println(Arrays.toString(arr)); } } }
|
5. 选择排序的时间复杂度
选择排序的时间复杂度为O(n^2),其中n为数组的长度。这是因为在每一轮遍历中,需要在未排序部分选择最小元素。
6. 总结
选择排序虽然不如一些高效的排序算法,但它简单、直观,并且不需要额外的内存空间。在处理小规模数据集或对稳定性不作要求时,选择排序是一种可行的选择。然而,在实际应用中,通常会优先选择更为高效的排序算法,如快速排序或归并排序。