📜  排序算法-选择排序(1)

📅  最后修改于: 2023-12-03 15:10:10.399000             🧑  作者: Mango

选择排序

选择排序是一种简单的排序算法,它的基本思想是找到未排序序列中的最小元素,然后将其放到已排序序列的末尾。重复这个过程,直到所有元素均排序完毕。

算法描述

1.首先在未排序序列中找到最小元素,存放到排序序列的起始位置;

2.再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾;

3.重复第二步,直到所有元素均排序完毕。

动图演示

选择排序

代码实现
  • Python
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]
    return arr

arr = [64, 25, 12, 22, 11]
print(selection_sort(arr))
  • C++
#include<iostream>
using namespace std;

int *selection_sort(int arr[], int n){
    for(int i=0; i<n; i++){
        // 找到未排序部分的最小元素
        int min_index = i;
        for(int j=i+1; j<n; j++){
            if(arr[j] < arr[min_index]){
                min_index = j;
            }
        }
        // 将最小元素放到已排序部分的末尾
        int tmp = arr[i];
        arr[i] = arr[min_index];
        arr[min_index] = tmp;
    }
    return arr;
}

int main(){
    int arr[5] = {64, 25, 12, 22, 11};
    int *result = selection_sort(arr, 5);
    for(int i=0; i<5; i++){
        cout<<result[i]<<" ";
    }
    return 0;
}
算法分析

时间复杂度:$O(n^2)$

空间复杂度:$O(1)$

选择排序的性能比冒泡排序略好,因为它每次交换的元素位置都是固定的,不像冒泡排序交换次数过多。但是,由于选择排序的固定性,它也无法充分利用已排序序列的有序性。

总结

选择排序是一种简单的排序算法,虽然其性能并不理想,但是它的排序原理简单易懂,代码实现也相对容易。在实际开发中,我们可以使用选择排序作为对比的基准算法,来评估其他排序算法的优劣。