CPP2022-18-数组-插入排序

 

6-1 插入排序

分数 25

全屏浏览题目

切换布局

作者 李廷元

单位 中国民用航空飞行学院

编程实现插入排序函数。void insertionSort(int arr[], int n);。其中arr存放待排序的数据,n为数组长度(1≤n≤1000)。

函数接口定义如下:

 

/* 对长度为n的数组arr执行插入排序 */ void insertionSort(int arr[], int n);

请实现insertionSort函数,使排序后的数据从小到大排列。

裁判测试程序样例:

 

#include <stdio.h> #define N 1000 int arr[N]; /* 对长度为n的数组arr执行插入排序 */ void insertionSort(int arr[], int n); /* 打印长度为n的数组arr */ void printArray(int arr[], int n); int main() { int n, i; scanf("%d", &n); for (i = 0; i < n; ++i) { scanf("%d", &arr[i]); } insertionSort(arr, n); printArray(arr, n); return 0; } /* 打印长度为n的数组arr */ void printArray(int arr[], int n) { int i; for (i = 0; i < n; i++) { printf("%d", arr[i]); if (i < n - 1) /* 下标0..n-2每个元素后面有个空格 */ printf(" ");/*下标n-1,也就是最后一个元素后面没有空格*/ } printf("\n");/* 一行打印完后换行 */ } /* 你的代码将嵌在这里 */

输入样例:

10
1 19 9 11 4 3 5 8 10 6

输出样例:

1 3 4 5 6 8 9 10 11 19
void insertionSort(int arr[], int n)
{
    for(int i=1;i<n;i++)
    {
        int min=arr[i];
        int j=i-1;
        for(j=i-1;j>=0;j--)
        {
            if(min<arr[j])
            {
                arr[j+1]=arr[j];
            }
            else
            {
                break;
            }
        }
        arr[j+1]=min;
    }
}

 

6-2 直接插入排序

分数 20

全屏浏览题目

切换布局

作者 DS课程组

单位 临沂大学

本题要求实现直接插入排序函数,待排序列的长度1<=n<=1000。

函数接口定义:

 

void InsertSort(SqList L);

其中L是待排序表,使排序后的数据从小到大排列。
###类型定义:

 

typedef int KeyType; typedef struct { KeyType *elem; /*elem[0]一般作哨兵或缓冲区*/ int Length; }SqList;

裁判测试程序样例:

 

#include<stdio.h> #include<stdlib.h> typedef int KeyType; typedef struct { KeyType *elem; /*elem[0]一般作哨兵或缓冲区*/ int Length; }SqList; void CreatSqList(SqList *L);/*待排序列建立,由裁判实现,细节不表*/ void InsertSort(SqList L); int main() { SqList L; int i; CreatSqList(&L); InsertSort(L); for(i=1;i<=L.Length;i++) { printf("%d ",L.elem[i]); } return 0; } /*你的代码将被嵌在这里 */

输入样例:

第一行整数表示参与排序的关键字个数。第二行是关键字值 例如:

10
5 2 4 1 8 9 10 12 3 6

输出样例:

输出由小到大的有序序列,每一个关键字之间由空格隔开,最后一个关键字后有一个空格。

1 2 3 4 5 6 8 9 10 12 
void  InsertSort(SqList L)
{
    for(int i=1;i<=L.Length;i++)
    {
        int min=L.elem[i];
        int j=i-1;
        for(j=i-1;j>=1;j--)
        {
            if(min<L.elem[j])
            {
                L.elem[j+1]=L.elem[j];
            }
            else
            {
                break;
            }
        }
        L.elem[j+1]=min;
    }
}

 

7-1 插入排序

分数 30

全屏浏览题目

切换布局

作者 魏峻

单位 陕西理工大学

插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

输入格式:

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

输出格式:

给出插入排序每一遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。

输入样例:

7
4 5 7 6 3 2 1

输出样例:

4 5 7 6 3 2 1
4 5 7 6 3 2 1
4 5 6 7 3 2 1
3 4 5 6 7 2 1
2 3 4 5 6 7 1
1 2 3 4 5 6 7

 

#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=1;i<n;i++)
    {
        int min=a[i];
        int j=i-1;
        for(j=i-1;j>=0;j--)
        {
            if(min<a[j])
            {
                a[j+1]=a[j];
            }
            else
            {
                break;
            }
        }
        a[j+1]=min;
        for(int k=0;k<n;k++)
            {
                cout<<a[k];
                if(k<n-1)
                {
                    cout<<" ";
                }
            }
        if(i<n-1)
        {
            cout<<endl;
        }
    }
    return 0;
}

 

 

 

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值