📅  最后修改于: 2023-12-03 15:10:10.399000             🧑  作者: Mango
选择排序是一种简单的排序算法,它的基本思想是找到未排序序列中的最小元素,然后将其放到已排序序列的末尾。重复这个过程,直到所有元素均排序完毕。
1.首先在未排序序列中找到最小元素,存放到排序序列的起始位置;
2.再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾;
3.重复第二步,直到所有元素均排序完毕。
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))
#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)$
选择排序的性能比冒泡排序略好,因为它每次交换的元素位置都是固定的,不像冒泡排序交换次数过多。但是,由于选择排序的固定性,它也无法充分利用已排序序列的有序性。
选择排序是一种简单的排序算法,虽然其性能并不理想,但是它的排序原理简单易懂,代码实现也相对容易。在实际开发中,我们可以使用选择排序作为对比的基准算法,来评估其他排序算法的优劣。