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;
}