线性表练习之Example010-使得由前m个递增有序元素和后n个递增有序元素组成的顺序表整个有序

本文主要是介绍线性表练习之Example010-使得由前m个递增有序元素和后n个递增有序元素组成的顺序表整个有序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Example010

原文链接:Example010

题目

设顺序表用数组 A[] 表示,表中元素存储在数组下标 0~m+n-1 的范围内,前 m 个元素递增有序,后 n 个元素也递增有序,设计一个算法,使得整个顺序表有序。

分析

本题考查的知识点:

  • 数组
  • 嵌套 for 循环

分析

  • 将数组 A[] 中的 m+n 个元素(假设元素为 int 型)看成两个顺序表:表L和表R
  • 将数组当前状态看作起始状态,即此时表 LA[] 中前 m 个元素构成,表 RA[] 中后 n 个元素构成。
  • 要使 A[]m+n 个元素整体有序,只需将表R 中的元素逐个插入表 L 中的合适位置即可。
  • 插入过程,取表 R 中的第一个元素 A[m] 存入辅助变量 temp 中,让 temp 逐个与 A[m-1],…,A[0] 进行比较,当 temp<A[j](0≤j≤m-1)时,将 A[j] 后移一位,否则将 temp 存入 A[j+1] 中。
  • 重复上述过程,继续插入 A[m+1]A[m+2],…,A[m+n-1],最终 A[] 中元素整体有序。

图解

请添加图片描述

C实现

核心代码:

/*** 使得整个顺序表有序** @param A 顺序表* @param m 前半部分递增有序的元素个数* @param n 后半部分递增有序的元素个数*/
void moveSort(int A[], int m, int n) {// 从 m 开始,需要移动 n 个数for (int i = m; i < m + n; i++) {// 临时保存要移动的数值int temp = A[i];int j;// 从下标为 i-1 的数开始,将前面的数向后移动一位for (j = i - 1; j >= 0; j--) {// 只移动大于 temp 的数,即不能把下标为 i-1 之前的所有数(包括 i-1 所表示的数)都向后移动一位if (A[j] > temp) {// 用前一位的数覆盖后一位的数A[j + 1] = A[j];} else {// 即遇到 A[j]<=temp 的情况时,跳出循环,停止移动break;}}// 移动之后,A[j+1]就是空出来的位置,填入tempA[j + 1] = temp;}
}

完整代码:

#include <stdio.h>/*** 使得整个顺序表有序** @param A 顺序表* @param m 前半部分递增有序的元素个数* @param n 后半部分递增有序的元素个数*/
void moveSort(int A[], int m, int n) {// 从 m 开始,需要移动 n 个数for (int i = m; i < m + n; i++) {// 临时保存要移动的数值int temp = A[i];int j;// 从下标为 i-1 的数开始,将前面的数向后移动一位for (j = i - 1; j >= 0; j--) {// 只移动大于 temp 的数,即不能把下标为 i-1 之前的所有数(包括 i-1 所表示的数)都向后移动一位if (A[j] > temp) {// 用前一位的数覆盖后一位的数A[j + 1] = A[j];} else {// 即遇到 A[j]<=temp 的情况时,跳出循环,停止移动break;}}// 移动之后,A[j+1]就是空出来的位置,填入tempA[j + 1] = temp;}
}/*** 打印数组* @param arr 待打印的数组* @param len 数组长度*/
void print(int arr[], int len) {printf("[");for (int i = 0; i < len; i++) {printf("%d", arr[i]);if (i != len - 1) {printf(", ");}}printf("]\n");
}int main() {// 创建测试用的数组int A[] = {1, 3, 5, 7, 9, 2, 4, 6, 8};int m = 5, n = 4;print(A, m + n);// 调用函数排序moveSort(A, m, n);print(A, m + n);
}

执行结果:

[1, 3, 5, 7, 9, 2, 4, 6, 8]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

Java实现

核心代码:

    /*** 使得整个顺序表有序** @param A 顺序表* @param m 前半部分递增有序的元素个数* @param n 后半部分递增有序的元素个数*/public static void moveSort(int[] A, int m, int n) {// 从 m 开始,需要移动 n 个数for (int i = m; i < m + n; i++) {// 临时保存要移动的数值int temp = A[i];int j;// 从下标为 i-1 的数开始,将前面的数向后移动一位for (j = i - 1; j >=0 0; j--) {// 只移动大于 temp 的数,即不能把下标为 i-1 之前的所有数(包括 i-1 所表示的数)都向后移动一位if (A[j] > temp) {// 用前一位的数覆盖后一位的数A[j + 1] = A[j];} else {// 即遇到 A[j]<=temp 的情况时,跳出循环,停止移动break;}}// 移动之后,A[j+1]就是空出来的位置,填入tempA[j + 1] = temp;}}

完整代码:

import java.util.Arrays;/*** @author lcl100* @create 2022-03-06 16:01*/
public class Test {public static void main(String[] args) {int[] A = new int[]{1, 3, 5, 7, 9, 2, 4, 6, 8};int m = 5, n = 4;System.out.println(Arrays.toString(A));// 打印数组// 调用函数进行移动moveSort(A, m, n);System.out.println(Arrays.toString(A));}/*** 使得整个顺序表有序** @param A 顺序表* @param m 前半部分递增有序的元素个数* @param n 后半部分递增有序的元素个数*/public static void moveSort(int[] A, int m, int n) {// 从 m 开始,需要移动 n 个数for (int i = m; i < m + n; i++) {// 临时保存要移动的数值int temp = A[i];int j;// 从下标为 i-1 的数开始,将前面的数向后移动一位for (j = i - 1; j >= 0; j--) {// 只移动大于 temp 的数,即不能把下标为 i-1 之前的所有数(包括 i-1 所表示的数)都向后移动一位if (A[j] > temp) {// 用前一位的数覆盖后一位的数A[j + 1] = A[j];} else {// 即遇到 A[j]<=temp 的情况时,跳出循环,停止移动break;}}// 移动之后,A[j+1]就是空出来的位置,填入tempA[j + 1] = temp;}}
}

执行结果:

[1, 3, 5, 7, 9, 2, 4, 6, 8]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

这篇关于线性表练习之Example010-使得由前m个递增有序元素和后n个递增有序元素组成的顺序表整个有序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/248531

相关文章

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

基于Redis有序集合实现滑动窗口限流的步骤

《基于Redis有序集合实现滑动窗口限流的步骤》滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis... 滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

POJ1631最长单调递增子序列

最长单调递增子序列 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.StringTokenizer;publ

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

MySql 事务练习

事务(transaction) -- 事务 transaction-- 事务是一组操作的集合,是一个不可分割的工作单位,事务会将所有的操作作为一个整体一起向系统提交或撤销请求-- 事务的操作要么同时成功,要么同时失败-- MySql的事务默认是自动提交的,当执行一个DML语句,MySql会立即自动隐式提交事务-- 常见案例:银行转账-- 逻辑:A给B转账1000:1.查询

遮罩,在指定元素上进行遮罩

废话不多说,直接上代码: ps:依赖 jquer.js 1.首先,定义一个 Overlay.js  代码如下: /*遮罩 Overlay js 对象*/function Overlay(options){//{targetId:'',viewHtml:'',viewWidth:'',viewHeight:''}try{this.state=false;//遮罩状态 true 激活,f

html css jquery选项卡 代码练习小项目

在学习 html 和 css jquery 结合使用的时候 做好是能尝试做一些简单的小功能,来提高自己的 逻辑能力,熟悉代码的编写语法 下面分享一段代码 使用html css jquery选项卡 代码练习 <div class="box"><dl class="tab"><dd class="active">手机</dd><dd>家电</dd><dd>服装</dd><dd>数码</dd><dd