• 选择排序


    任务描述

    本关任务:实现选择排序算法,并将乱序数列变成升序。

    相关知识——简单选择排序算法

    简单选择排序是一种简单直观的排序算法,首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

    • 算法步骤:

      1. 初始状态:无序序列为R[0,n1],长度n,有序区为空;

      2. i=1,..,n1趟排序从当前无序区R[i1,n1]中选出最小的元素R[k],并将它与无序区的第1个记录R[i1]交换,则R[0,i1]变为元素个数增加1的新有序区,R[i,n1]变为元素个数减少1的新无序区;

      3. n1趟选择交换后结束。

    编程要求

    本关的编程任务是补全sort.h文件中的simpleSelectSort函数,实现按升序方式将arr数组前面n个元素按升序进行简单选择排序,且每趟选择排序均从左至右选择首次出现的最小值,输出排序过程中的前三趟和最后一趟的排序结果。具体要求如下: // 简单排序算法:将arr数组前面n个元素按升序进行简单选择排序,一趟选择排序,从左至右选择首次出现的最小值 // 调用print_array(int arr[] int n)输出排序过程中的前三趟和最后一趟的排序结果 void simpleSelectSort(int arr[], int n); ####评测说明 本关中包含三个文件分别是: step2/sort.h :此文件为学员文件,其中simpleSelectSort函数,待补充完整 step2/main.cpp:此文件为评测文件(含main函数),引用“sort.h”。 (上述三个文件可通过点击在代码取的右上角文件夹中的step2文件夹中查看)

    输入输出说明

    输入n(1<=n<=100),输入n个整数,对着n个整数采用简单选择排序方法进行升序排序,每趟简单选择排序过程采用从左至右选择首次出现的最小值,输出前三趟以及最终的排序序列,例如以下所示:

    测试输入: 10 7 1 4 6 8 9 5 2 3 10 预期输出: 1 7 4 6 8 9 5 2 3 10 1 2 4 6 8 9 5 7 3 10 1 2 3 6 8 9 5 7 4 10 1 2 3 4 5 6 7 8 9 10

    测试输入: 15 3 44 38 5 47 15 36 26 27 2 46 4 19 50 48 预期输出: 2 44 38 5 47 15 36 26 27 3 46 4 19 50 48 2 3 38 5 47 15 36 26 27 44 46 4 19 50 48 2 3 4 5 47 15 36 26 27 44 46 38 19 50 48 2 3 4 5 15 19 26 27 36 38 44 46 47 48 50

     

    main.cpp

    #include "sort.h"
    
    int main()
    {
        int n;
        cin >> n;
        int* arr;
        arr = new int[n];
        for (int i = 0; i < n; i++)
        {
            cin >> arr[i];
        }
        simpleSelectSort(arr, n);// 执行简单选择排序,并输出前3趟和最后一趟排序结果
        return 0;
    }

    sort.h

    #include <iostream>
    using namespace std;
    
    // 打印arr数组的arr[0~n-1]元素,元素之间使用一个空格相隔
    void print_array(int arr[], int n);
    
    //  简单排序算法:将arr数组前面n个元素按升序进行简单选择排序,一趟选择排序,从左至右选择首次出现的最小值
    //  调用print_array(int arr[] int n)输出前三次简单选择排序后的序列,以及最终的升序序列
    void simpleSelectSort(int arr[], int n);
    
    void print_array(int arr[], int n)
    
    {
        for (int i = 0; i < n; i++)
        {
            cout << arr[i] << " ";
        }
        cout << endl;
    }
    int n;
    void simpleSelectSort(int arr[], int n)
    {
        // 请在这里补充代码,完成本关任务
        /********** Begin *********/
        int len = n;
        int minIndex, temp;
        for (int i = 0; i < len - 1; i++) {
            minIndex = i;
            for (int j = i + 1; j < len; j++) {
                if (arr[j] < arr[minIndex]) {     // 寻找最小的数
                    minIndex = j;                 // 将最小数的索引保存
                }
            }
            temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
            if (i < 3)print_array(arr, n);
        }
        print_array(arr, n);
        /********** End **********/
    }
  • 相关阅读:
    【C语言】C语言static和extern区别
    【C语言】C语言外部变量和内部变量
    【C语言】C语言局部变量和全局变量
    【C语言】C语言常量和变量
    【C语言】C语言数据类型
    【C语言】C语言标识符
    【C语言】C语言关键字
    【C语言】外部函数和内部函数
    【C语言】C语言函数
    Android 测试 Appium、Robotium、monkey等框架或者工具对比
  • 原文地址:https://www.cnblogs.com/xxxsans/p/14004647.html
Copyright © 2020-2023  润新知