CPP2022-18-数组-插入排序

简介: CPP2022-18-数组-插入排序

02debcfc1fd248f786f466afc62799c5.jpg

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");/* 一行打印完后换行 */ } /* 你的代码将嵌在这里 */

输入样例:

1. 10
2. 1 19 9 11 4 3 5 8 10 6

输出样例:

1 3 4 5 6 8 9 10 11 19
1. void insertionSort(int arr[], int n)
2. {
3. for(int i=1;i<n;i++)
4.     {
5. int min=arr[i];
6. int j=i-1;
7. for(j=i-1;j>=0;j--)
8.         {
9. if(min<arr[j])
10.             {
11.                 arr[j+1]=arr[j];
12.             }
13. else
14.             {
15. break;
16.             }
17.         }
18.         arr[j+1]=min;
19.     }
20. }

 

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; } /*你的代码将被嵌在这里 */

输入样例:

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

1. 10
2. 5 2 4 1 8 9 10 12 3 6

输出样例:

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

1 2 3 4 5 6 8 9 10 12
1. void  InsertSort(SqList L)
2. {
3. for(int i=1;i<=L.Length;i++)
4.     {
5. int min=L.elem[i];
6. int j=i-1;
7. for(j=i-1;j>=1;j--)
8.         {
9. if(min<L.elem[j])
10.             {
11.                 L.elem[j+1]=L.elem[j];
12.             }
13. else
14.             {
15. break;
16.             }
17.         }
18.         L.elem[j+1]=min;
19.     }
20. }

 

7-1 插入排序

分数 30

全屏浏览题目

切换布局

作者 魏峻

单位 陕西理工大学

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

输入格式:

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

输出格式:

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

输入样例:

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

输出样例:

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

 

1. #include<bits/stdc++.h>
2. using namespace std;
3. int main()
4. {
5. int n;
6.     cin>>n;
7. int a[n];
8. for(int i=0;i<n;i++)
9.     {
10.         cin>>a[i];
11.     }
12. for(int i=1;i<n;i++)
13.     {
14. int min=a[i];
15. int j=i-1;
16. for(j=i-1;j>=0;j--)
17.         {
18. if(min<a[j])
19.             {
20.                 a[j+1]=a[j];
21.             }
22. else
23.             {
24. break;
25.             }
26.         }
27.         a[j+1]=min;
28. for(int k=0;k<n;k++)
29.             {
30.                 cout<<a[k];
31. if(k<n-1)
32.                 {
33.                     cout<<" ";
34.                 }
35.             }
36. if(i<n-1)
37.         {
38.             cout<<endl;
39.         }
40.     }
41. return 0;
42. }

 

 

相关文章
|
机器学习/深度学习 人工智能
CPP2022-17-数组-选择排序(下)
CPP2022-17-数组-选择排序(下)
295 0
|
5月前
|
算法 搜索推荐 C++
【CPP】归并排序
【CPP】归并排序
|
5月前
|
编译器 C++
【CPP】交换排序:冒泡排序、快速排序
【CPP】交换排序:冒泡排序、快速排序
|
5月前
|
算法 搜索推荐 C++
【CPP】选择排序:直接选择排序、堆排序
【CPP】选择排序:直接选择排序、堆排序
|
5月前
|
C++
【CPP】插入排序:直接插入排序、希尔排序
【CPP】插入排序:直接插入排序、希尔排序
|
存储 算法 搜索推荐
21.【冒泡排序与选择排序与malloc()函数】
21.【冒泡排序与选择排序与malloc()函数】
89 0
CPP2022-19-数组-冒泡排序(下)
CPP2022-19-数组-冒泡排序(下)
185 0