直接选择排序 selsort [1*]

题目描述
输入n个整数,用选择排序的方法进行排序(升序,由小到大排)
选排方法:从第1到第n个数中找出最大数的位置,将最大数与第1个元素交换。
从第2个数到第n个找出最大数的位置,将最大数与第2个元素交换。
以此类推完成n-1趟选择排序。

Input
第一行数字n 代表接下来有n个整数
接下来n行,每行一个整数

Output
升序输出排序结果
每行一个数据

Sample Input
5
12
18
14
13
16

Sample Output
12
13
14
16
18
Hint

n<=1000
每个数据<=5000

#include <iostream>
using namespace std;

//选择排序
void SelectionSort(int* arr,int len) 
{
    int i,j;
    for(i=0;i<len-1;i++)
    {
        int min=i;
        for(j=i+1;j<len;j++)
        {
            if(arr[j]<arr[min])
            {
                min=j;
            }
        }
        
        //防止自交换
        if(min!=i)
        {
            int tmp=arr[i];
            arr[i]=arr[min];
            arr[min]=tmp;
        }
    }
}
 
 
//打印数据
void Show(int* arr,int len)
{
    int i;
    for(i=0;i<len;i++)
    {
        cout << arr[i] << endl;
    }
}
 
int main()
{
    int n;
    cin >> n;
    int a[n];
    for (int i = 0; i < n; i++)
        cin >> a[i];
    SelectionSort(a,len);
    Show(a,len);
    return 0;
} 

【以下回答由 GPT 生成】

def selection_sort(n, arr):
    for i in range(n-1):
        # Find the minimum element in the remaining unsorted portion of the array
        min_index = i
        for j in range(i+1, n):
            if arr[j] < arr[min_index]:
                min_index = j

        # Swap the minimum element with the first element in the unsorted portion
        arr[i], arr[min_index] = arr[min_index], arr[i]

    return arr

# Test the function
n = int(input())
arr = []
for _ in range(n):
    arr.append(int(input()))

sorted_arr = selection_sort(n, arr)

for num in sorted_arr:
    print(num)

该程序使用选择排序算法对输入的n个整数进行排序。首先,程序会获取输入的整数个数n,然后读取每个整数并将其存储在数组arr中。接下来,程序会调用selection_sort函数,传递整数个数n和整数数组arr作为参数。在selection_sort函数中,使用两层循环来进行选择排序。外层循环控制从第1个数到第n-1个数的趟数,内层循环在当前趟数中找到最小数的位置。找到最小数的位置后,将其与当前趟数的第一个元素交换。最后,函数返回排序后的整数数组。最后,程序会遍历排序后的数组并输出每个整数。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^