CPP2022-17-数组-选择排序

 

 

6-1 编写一个选择排序函数,实现升序排序功能。

分数 10

全屏浏览题目

切换布局

作者 王和兴

单位 东北大学秦皇岛分校

编写一个选择排序函数,实现升序排序功能。

函数接口定义:

 

void select_sort(int array[], int n);

其中array是待排序的数组名,n为数据array中元素的个数。

裁判测试程序样例:

 

#include <iostream> using namespace std; int main() { void select_sort(int array[],int n); int a[10]={6,3,1,4,0,9,8,2,5,7},i; select_sort(a,10); for(i=0;i<10;i++) cout<<a[i]<<" "; cout<<endl; return 0; } /* 你的代码将被嵌在这里 */

输出样例:

0  1  2  3  4  5  6  7  8  9
void select_sort(int array[], int n)
{
    for(int i=0;i<=n-2;i++)
    {
        for(int j=i+1;j<=n-1;j++)
            if(array[i]>array[j])
            {
                int t=array[i];
                array[i]=array[j]; 
                array[j]=t;
            }  
    }
}

6-2 选择排序

分数 10

全屏浏览题目

切换布局

作者 王群芳

单位 合肥师范学院

题目描述

从键盘输入某班学生某门课程的成绩(每班人数最多不超过40人),当输入为负值时,表示输入结束。本题要求实现用选择排序法将分数从高到低排序(并输出每趟排序结果)的函数。

函数接口定义:

 

void DataSort(int score[], int n);

其中 score 是用户传入的学生成绩数组, n是学生人数。

裁判测试程序样例:

 

#include <stdio.h> #define N 40 int ReadScore(int score[]); void DataSort(int score[], int n); void PrintScore(int score[], int n); int main() { int score[N], n; n = ReadScore(score); printf("n=%d\n", n); if(n) { DataSort(score, n); printf("After sort: "); PrintScore(score, n); } return 0; } int ReadScore(int score[]) { int i = -1; do{ i++; scanf("%d", &score[i]); }while (score[i] >= 0); return i; } /* 请在这里填写答案 */ void PrintScore(int score[], int n) { int i; for (i=0; i<n; i++) { if (i!=0) printf(" "); printf("%d", score[i]); } printf("\n"); }

输入样例:

64 85 73 99 92 -1

输出样例:

n=5
第1趟:99 85 73 64 92
第2趟:99 92 73 64 85
第3趟:99 92 85 64 73
第4趟:99 92 85 73 64
After sort: 99 92 85 73 64
void DataSort(int score[], int n)
{ 
    int i=0;int max,temp;
    for(i=0;i<n-1;i++)
    {  max=i;
       for( int j=i+1;j<n;j++)
       {
           if(score[j]>score[max])
           {
               max=j;
           }
       }
        temp = score[max];  
        score[max] = score[i];
        score[i] = temp;
        printf("第%d趟:",i+1);
        PrintScore(score, n);
    }
}

6-3 使用函数的选择法排序

分数 10

全屏浏览题目

切换布局

作者 张泳

单位 浙大城市学院

本题要求实现一个用选择法对整数数组进行简单排序的函数。

函数接口定义:

 

void sort( int a[], int n );

其中a是待排序的数组,n是数组a中元素的个数。该函数用选择法将数组a中的元素按升序排列,结果仍然在数组a中。

裁判测试程序样例:

 

#include <stdio.h> #define MAXN 10 void sort( int a[], int n ); int main() { int i, n; int a[MAXN]; scanf("%d", &n); for( i=0; i<n; i++ ) scanf("%d", &a[i]); sort(a, n); printf("After sorted the array is:"); for( i = 0; i < n; i++ ) printf(" %d", a[i]); printf("\n"); return 0; } /* 你的代码将被嵌在这里 */

输入样例:

4
5 1 7 6

输出样例:

After sorted the array is: 1 5 6 7
void sort( int a[], int n )
{
    for(int i=0;i<=n-2;i++)
    {
        for(int j=i+1;j<=n-1;j++)
            if(a[i]>a[j])
            {
                int t=a[i];
                a[i]=a[j]; 
                a[j]=t;
            }  
    }
}

7-1 选择法排序

分数 15

全屏浏览题目

切换布局

作者 C课程组

单位 浙江大学

本题要求将给定的n个整数从大到小排序后输出。

输入格式:

输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。

输出格式:

在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。

输入样例:

4
5 1 7 6

输出样例:

7 6 5 1
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a[n];
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    for(int i=0;i<=n-2;i++)
    {
        for(int j=i+1;j<=n-1;j++)
            if(a[i]<a[j])
            {
                int t=a[i];
                a[i]=a[j]; 
                a[j]=t;
            }  
    }
    for(int i=0;i<n;i++)
    {
        cout<<a[i];
        if(i<n-1)
        {
            cout<<" ";
        }
    }
    return 0;
}

7-2 选择排序

分数 15

全屏浏览题目

切换布局

作者 魏峻

单位 陕西理工大学

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

输入格式:

输入在第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<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a[n];
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    for(int i=0;i<=n-2;i++)
    {
        int flag=0;
        int min=i;
        for(int j=i+1;j<=n-1;j++)
        {
            if(a[min]>a[j])
            {
                flag=1;
                min=j;
            } 
        }
        int temp = a[min];  
        a[min] = a[i];
        a[i] = temp;
        if(flag==1)
        {
            for(int k=0;k<n;k++)
        {
            cout<<a[k];
            if(k<=n-2)
            {
                cout<<" ";
            }
        }
        if(i<n-2)
        {
            cout<<endl;
        }
        }
    }
    return 0;
}

7-3 第k轮选择法排序

分数 20

全屏浏览题目

切换布局

作者 lty

单位 浙江大学

众所周知,ln是一个dalao,lty是一个five,现在lty问ln,你能将n个数字进行选择法排序使其从小到大有序吗?ln觉得这个问题很简单,然后就反问lty,你能在这个的基础上,输出进行k轮选择法排序的结果吗?lty是个弱鸡,当然不会,于是向你请教这个问题,你能替lty解决这个问题吗? 给你n个数字,输出将这n个数字经过k轮选择法排序后的结果。

选择法排序:遍历整个数组,第一轮遍历第1位到第n位,找到最小的与第1位交换,第二轮遍历第2位到第n位,找到最小的与第2位交换,以此类推。(每轮只交换一次)

输入格式:

输入在第1行中给出N和K(1 ≤ K < N ≤ 100),在第2行中给出N个待排序的正整数,数字间以空格分隔。

输出格式:

在一行中输出选择法排序扫描完第K遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。

输入样例:

在这里给出一组输入。例如:

6 2
2 3 5 1 6 4

输出样例:

在这里给出相应的输出。例如:

1 2 5 3 6 4
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,k;
    cin>>n>>k;
    int a[n];
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    for(int i=0;i<n-1;i++)
    {
        int min=i;
        for(int j=i+1;j<n;j++)
        {
            if(a[min]>a[j])
            {
                min=j;
            }
        }
        int temp=a[min];
        a[min]=a[i];
        a[i]=temp;
        if(i==k-1)
        {
            for(int p=0;p<n;p++)
            {
                cout<<a[p];
                if(p<n-1)
                {
                    cout<<" ";
                }
            }
        }
    }
    cout<<endl;
    return 0;
}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值