Golang数组练习题:已知有一个排序好的升序数组,要求插入一个元素,最后打印该数组,顺序依然是升序

2 篇文章 0 订阅

已知有一个排序好的升序数组,要求插入一个元素,最后打印该数组,顺序依然是升序(数组不可以动态增长)

package main

import "fmt"

func appendArr(arr *[5]int, num int) [6]int {
	//数组不能动态增长 新声明原数组len+1
	var newArr [len(arr) + 1]int
	var appendStatus bool = false //追加状态
	//使用已知的有序数组 进行循环
	for i := 0; i < len(arr); i++ {
		if appendStatus {
			//为真说明插入过值 以后的下标+1
			newArr[i+1] = arr[i]
		} else if num <= arr[i] && !appendStatus {
			//如果当前下标值 大于输入值 并且未插入数据 符合升序插入
			newArr[i] = num
			//当前下标值还未插入新数组内
			newArr[i+1] = arr[i]
			appendStatus = true
		} else {
			//顺序码放
			newArr[i] = arr[i]
		}
	}

	//如果为false 说明循环内 不符合直接追加末尾
	if !appendStatus {
		newArr[len(arr)] = num
	}

	return newArr

	/*
		例插入 33 代码执行过程
		 有序数组[20, 30, 40, 50, 60]
			newArr 比原有序数组长度大1,因为要插入一个元素
			appendStatus 初始化为false 默认无插入
			for循环,按照数组内元素 从0下标 顺序执行

				代码执行过程
				i=0第一次循环 arr[0] = 20
					进入if判断
						(appendStatus = false) 不成立
						(num <= arr[i] && !appendStatus )33 不小于等于 20  并且 appendStatus取反为真 不成立
						进入else 区间 顺序码放
							newArr[i] = arr[i] 数据结构 newArr[0] = 20
					第一次循环结果
						 newArr[20,0,0,0,0,0]

			    i=1第二次循环 arr[1] = 30
					进入if判断
						(appendStatus = false) 不成立
						(num <= arr[i] && !appendStatus )33 不小于等于 30  并且 appendStatus取反为真 不成立
						进入else 区间 顺序码放
							newArr[i] = arr[i] 数据结构 newArr[1] = 30
					第二次循环结果
						newArr[20,30,0,0,0,0]

				i=2第三次循环 arr[2] = 40
					进入if判断
						(appendStatus = false) 不成立
						(num <= arr[i] && !appendStatus )33 小于等于 40  并且 appendStatus取反为真 成立
							newArr[i] = num 数据结构 newArr[2] = 33
							newArr[i+1] = arr[i] 数据结构 newArr[3] = 40
							appendStatus = true //告知下次循环 数据已插入 下标增长1
						有条件满足则不进入else 区间
					第三次循环结果
						newArr[20,30,33,40,0,0]

				i=3第四次循环 arr[3] = 50
					进入if判断
						(appendStatus = true) 成立
						newArr[i+1] = arr[i] 数据结构 newArr[4] = 50
						(num <= arr[i] && !appendStatus )33 小于等于 40  并且 appendStatus取反为假 不成立
						有条件满足则不进入else 区间
					第三次循环结果
						newArr[20,30,33,40,50,0]

				i=4第五次循环 arr[4] = 60
					进入if判断
						(appendStatus = true) 成立
						newArr[i+1] = arr[i] 数据结构 newArr[5] = 60
						(num <= arr[i] && !appendStatus )33 小于等于 40  并且 appendStatus取反为假 不成立
						有条件满足则不进入else 区间
					第三次循环结果
						newArr[20,30,33,40,50,60]


				当num >= 60时 num大于数组所有元素 第二个条件不会成立
				appendStatus不会为true  所以这个判断得知  num <= arr[i] 没有一个元素符合
				直接追加到末尾
				if !appendStatus {
					newArr[len(arr)] = num
				}

				循环结束 return [20,30,33,40,50,60]
	*/
}

func main() {
	//已知一个有序数组,要求插入一个元素, 最后打印该数组顺序依然是升序
	var sortArr [5]int = [5]int{20, 30, 40, 50, 60}
	var num int
	fmt.Println("请输入插入元素值:")
	fmt.Scan(&num)
	newArr := appendArr(&sortArr, num)
	fmt.Println(newArr)
}

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值