在一个升序排列的数据序列(1,3,5,7,9)中插入 x=2,使得插入后序列仍然 保持升序排列。
代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class demo_java {
public static void main(String[] args) {
// 初始化
List<Integer> list = new ArrayList<>(Arrays.asList(1, 3, 5, 7, 9));
System.out.println(list);
// 插入 2
list.add(2);
Collections.sort(list); // 排序
System.out.println(list);
}
}
打印结果:
[1, 3, 5, 7, 9]
[1, 2, 3, 5, 7, 9]
Process finished with exit code 0
遍历原有序列,从第一个开始向后开始查找大于当前x=2的数,将当前数以及后面的数依次往后移动一位,然后将x=2填充到满足if条件时的索引位置。
import java.util.Arrays;
public class NumberTest {
public static void main(String[] args) {
//假定数组有序
int a[]={-1,0,3,4,7};
int b[]=new int[a.length+1];
for (int i = 0; i < a.length; i++) {
b[i]=a[i];
}
System.out.println("原数组:"+Arrays.toString(a));
int x=2;
boolean isInsert=false;
for (int i = b.length-2;i>=0 ; i--) {
if(b[i]>x){
b[i+1]=b[i];
continue;//退出此次循环
}
if(b[i]<=x){
b[i+1]=x;
isInsert=true;
break;
}
}
if(isInsert==false){
b[0]=x;
}
System.out.println("插入元素之后数组:"+Arrays.toString(b));
}
}
我写给你
import java.util.Arrays;
import java.util.*;
public class Dome2 {
//头插法
private List insertHead(int [] arr,int data){
int len =arr.length;
int [] a =new int[len+1];
int k=0;
if (data<=arr[0]) a[k]=data;
for (int i = 0; i <=len-1 ; i++) {
k+=1;
a[k]=arr[i];
}
List<Integer> list =new ArrayList<>();
for (int num:a) {
list.add(num);
}
return list;
}
//插入数据到数组之中
private List insertBody(int [] arr,int data){
int len =arr.length;
int [] a =new int[len+1];
int k=0;//通过移动k插入数据
for (int i = 0; i <=len-1 ; i++) {
if(data>=arr[i]&&data<=arr[i+1]){
a[k]=arr[i];
k+=1;
a[k]=data;
i+=1;
k+=1;
}
a[k]=arr[i];
k+=1;
}
List<Integer> list =new ArrayList<>();
for (int num:a) {
list.add(num);
}
return list;
}
//尾插法
private List insertTial(int [] arr,int data) {
int len = arr.length;
int[] a = new int[len + 1];
int k = 0;
for (int i = 0; i <= len - 1; i++) {
a[k] = arr[i];
k += 1;
}
if (data >= arr[len - 1]) a[k] = data;
List<Integer> list = new ArrayList<>();
for (int num : a) {
list.add(num);
}
return list;
}
public static void main(String[] args) {
int [] arr ={1,3,5,7,9};
System.out.println("输入的有序数组arr为:"+Arrays.toString(arr));
Scanner sc=new Scanner(System.in);
System.out.println("请输入插入的数据:");
int x=sc.nextInt();
if(arr[0]<=x&&arr[arr.length-1]>x) {
System.out.println("在数组之中插入数据"+x+"后有序的数组为:" + new Dome2().insertBody(arr, x));
}
else if (arr[arr.length-1]<=x)
{
System.out.println("在数组之中插入数据"+x+"后有序的数组为:" + new Dome2().insertTial(arr, x));
}
else
{
System.out.println("在数组之中插入数据"+x+"后有序的数组为:" + new Dome2().insertHead(arr, x));
}
}
}
import java.util.Arrays;
public class Test01 {
public static void main(String[] args) {
int[] data = new int[]{1, 3, 5, 7, 9}; //原始数组
int insertValue = 2; //待插入的值
int[] result = new int[data.length + 1];// 原始数组扩容+1
int j = 0;//结果数组起始下标
boolean inserted = false;//是否已经将插入的值插入
for (int i = 0; i < data.length; i++) {
if (!inserted && data[i] > insertValue) { //如果插入值小于原始数组的值,并且未插入
result[j++] = insertValue;//插入待插入的值
inserted = true;//插入标识设置为true
}
result[j++] = data[i];//插入原始数组的值
}
System.out.println(Arrays.toString(result));
}
}
import java.util.Arrays;
public class Main {
static int[] a = {1, 3, 5, 7, 9, 0};
public static void main(String[] args) {
System.out.println("插入前:" + Arrays.toString(a));
for (int i = 0; i < a.length; i++) {
if (a[i] >= 2) { //找到要插入的位置
//从i开始,将数组整体向后移动,数组变为--{1,要插入的位置,3,5,7,9}
for (int j = a.length - 1; j >= i; j--) a[j] = a[j - 1];
a[i] = 2;//最后把空的位置赋值为2
break;
}
}
System.out.println("插入后:" + Arrays.toString(a));
}
}