选择排序

Description

输入n个数组,将其从小到大排列。
输入格式: 第一行一个整数n,表示数的个数,3<=n<=100,第二行有n个整数,中间用一空格隔开。
输出格式:一行n个整数,每两个数之间用一空格隔开。
请使用选择排序算法完成本题。

Sample Input

5
1 3 2 5 4

Sample Output

1 2 3 4 5

python解法

# 读取输入
n = int(input().strip())
nums = list(map(int, input().strip().split()))

# 选择排序算法
for i in range(n):
    # 假设当前位置是最小的
    min_idx = i
    # 遍历剩余部分寻找最小值的索引
    for j in range(i+1, n):
        if nums[j] < nums[min_idx]:
            min_idx = j
    # 交换找到的最小值和当前位置的值
    nums[i], nums[min_idx] = nums[min_idx], nums[i]

# 输出排序后的数组
print(' '.join(map(str, nums)))

c++解法

#include<bits/stdc++.h> // 引入标准库头文件
using namespace std;

int a[100]; // 定义一个大小为100的整型数组a

int main() {
    int n;
    cin >> n; // 输入数组的长度n

    // 读取n个整数到数组a中
    for(int i = 0; i < n; i++) {
        cin >> a[i];
    }

    // 选择排序算法,进行n次循环,每次找到未排序部分的最大值,并交换到数组末尾
    for(int i = 0; i < n; i++) {
        int max = 0; // 初始化max为0,用于存储当前未排序部分的最大值的下标
        // 在未排序部分(从1到n-i-1)中查找最大值
        for(int j = 1; j < n - i; j++) {
            // 如果找到比当前最大值还大的数,则更新max
            if(a[j] > a[max]) {
                max = j;
            }
        }
        // 将找到的最大值交换到当前未排序部分的末尾
        swap(a[max], a[n - i - 1]);
    }

    // 输出排序后的数组
    for(int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }

    return 0; // 程序结束
}
如果您有更优的解法,欢迎在评论区一起交流噢~
阅读剩余
THE END