鱼C论坛

 找回密码
 立即注册
查看: 1520|回复: 1

[已解决]选择排序

[复制链接]
发表于 2023-11-23 10:58:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
选择排序,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。

153511583598984ab75e4cd.gif

输入格式:
输入在第1行中给出N(1<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔,并保证数字没有重复的出现。

输出格式:
给出选择排序每一遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。注意:当排序完成时应立即停止。

输入样例1:
7
4 5 7 6 3 2 1
输出样例1:
1 5 7 6 3 2 4
1 2 7 6 3 5 4
1 2 3 6 7 5 4
1 2 3 4 7 5 6
1 2 3 4 5 7 6
1 2 3 4 5 6 7
输入样例2:
5
1 2 3 5 4
输出样例2:
1 2 3 4 5


这题我这样写哪里错了
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
    int n,i;
    cin>>n;
    int array[n];
    for(i=0;i<n;i++)
    {
        cin>>array[i];
    }
     int j,temp,min;
    for(i=0;i<n-1;i++)
    {
        min=i;
        for(j=i+1;j<n;j++)
        {
            if(array[j]<array[min])
            {
                min=j;
            }
        }
        if(min!=i)
        {
            temp=array[min];
            array[min]=array[i];
            array[i]=temp;
}
   
    for(i=0;i<n;i++)
    {
        if(i!=n-1)
        cout<<array[i]<<" ";
        else
               cout<<array[i];
    }
    }
}
最佳答案
2023-11-23 10:58:50
你可以使用以下代码来实现选择排序:
  1. #include <stdio.h>
  2. void selectionSort(int array[], int n) {
  3.     int i, j, minIndex, temp;
  4.    
  5.     for (i = 0; i < n-1; i++) {
  6.         minIndex = i;
  7.         
  8.         // 找出剩下元素中最小的值
  9.         for (j = i+1; j < n; j++) {
  10.             if (array[j] < array[minIndex]) {
  11.                 minIndex = j;
  12.             }
  13.         }
  14.         
  15.         // 将最小值与当前位置交换
  16.         temp = array[i];
  17.         array[i] = array[minIndex];
  18.         array[minIndex] = temp;
  19.     }
  20. }
  21. int main() {
  22.     int array[] = {5, 4, 3, 2, 1};
  23.     int n = sizeof(array) / sizeof(array[0]);
  24.    
  25.     selectionSort(array, n);
  26.    
  27.     printf("排序结果:");
  28.     for (int i = 0; i < n; i++) {
  29.         printf("%d ", array[i]);
  30.     }
  31.    
  32.     return 0;
  33. }
复制代码

这段代码会对数组进行选择排序,并输出排序后的结果。你可以将需要排序的数组赋值给 `array` 数组,并根据实际情况修改数组长度 `n`。然后调用 `selectionSort(array, n)` 函数进行排序。最后输出排序结果即可。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-23 10:58:50 | 显示全部楼层    本楼为最佳答案   
你可以使用以下代码来实现选择排序:
  1. #include <stdio.h>
  2. void selectionSort(int array[], int n) {
  3.     int i, j, minIndex, temp;
  4.    
  5.     for (i = 0; i < n-1; i++) {
  6.         minIndex = i;
  7.         
  8.         // 找出剩下元素中最小的值
  9.         for (j = i+1; j < n; j++) {
  10.             if (array[j] < array[minIndex]) {
  11.                 minIndex = j;
  12.             }
  13.         }
  14.         
  15.         // 将最小值与当前位置交换
  16.         temp = array[i];
  17.         array[i] = array[minIndex];
  18.         array[minIndex] = temp;
  19.     }
  20. }
  21. int main() {
  22.     int array[] = {5, 4, 3, 2, 1};
  23.     int n = sizeof(array) / sizeof(array[0]);
  24.    
  25.     selectionSort(array, n);
  26.    
  27.     printf("排序结果:");
  28.     for (int i = 0; i < n; i++) {
  29.         printf("%d ", array[i]);
  30.     }
  31.    
  32.     return 0;
  33. }
复制代码

这段代码会对数组进行选择排序,并输出排序后的结果。你可以将需要排序的数组赋值给 `array` 数组,并根据实际情况修改数组长度 `n`。然后调用 `selectionSort(array, n)` 函数进行排序。最后输出排序结果即可。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-21 05:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表