选择排序是一种简单直观的排序算法。它的工作原理是:首先在整个序列中找到最小(或最大)的元素,将其与序列第一个位置的元素进行交换;然后,在剩下的未排序元素中继续寻找最小(或最大)的元素,将其与第二个位置的元素交换;以此类推,不断在剩余的未排序部分中选择最值元素,并放置到已排序部分的末尾,直到所有元素均被处理完毕。整个排序过程如同“不断选择并放置最值”,其时间复杂度为 O(n²),虽然效率不高,但由于其思路清晰、交换次数少,在某些特定场景下仍有其应用价值。


1. C/C++版代码:

void selectionSort(int arr[], int n) {
    int i, j;
    int minIndex;  // 记录当前最小元素的下标
    int temp;
    
    // 外层循环:控制已排序部分的边界
    // 每轮找到未排序部分的最小元素
    for (i = 0; i < n - 1; i++) {
        minIndex = i;  // 假设当前位置是最小值
        
        // 内层循环:在未排序部分查找最小元素
        for (j = i + 1; j < n; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;  // 更新最小元素下标
            }
        }
        
        // 将最小元素交换到当前位置
        if (minIndex != i) {
            temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
    }
}


2. Java版代码:

public class SelectionSort {
    public static void selectionSort(int[] arr) {
        int n = arr.length;
        
        // 外层循环:控制已排序部分的边界
        // 每轮将未排序部分的最小元素放到已排序部分的末尾
        for (int i = 0; i < n - 1; i++) {
            int minIndex = i;  // 假设当前位置i是最小元素
            
            // 内层循环:在未排序部分[i+1, n-1]中查找实际最小元素
            for (int j = i + 1; j < n; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;  // 更新最小元素的下标
                }
            }
            
            // 将找到的最小元素交换到当前位置i
            if (minIndex != i) {
                int temp = arr[i];
                arr[i] = arr[minIndex];
                arr[minIndex] = temp;
            }
        }
    }
}


3. Python版代码:

def selection_sort(arr):
    # 选择排序:每轮选择未排序部分的最小元素,交换到已排序部分的末尾
    
    n = len(arr)
    
    # 外层循环:控制已排序部分的边界
    # 每轮结束后,arr[0...i]已是有序的
    for i in range(n - 1):
        min_index = i  # 假设当前位置是最小元素
        
        # 内层循环:在未排序部分[i+1, n-1]中查找实际最小元素
        for j in range(i + 1, n):
            if arr[j] < arr[min_index]:
                min_index = j  # 更新最小元素的下标
        
        # 将找到的最小元素交换到当前位置i
        if min_index != i:
            arr[i], arr[min_index] = arr[min_index], arr[i]
点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)