java数组实现针对一个有序的数组插入一个数据并保持数组有序。

1,排序介绍

针对这个问题,其实可以看做是插入排序中的有序排序。简单的介绍哈,插入排序的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。

2,思路分析

可分为三种情况来考虑,第一种头插法也就是将数据插入到数组的第一个,这种情况插入的数据是最大值或最小值。第二种情况是将数据插入到数组中,插入的数组取值范围在最大值与最小值之间。第三种情况的也就是尾插法,插入的数据是最大值或最小值。

第一种头插法
输入有序数组:arr ={2,3,6,89}
插入的记录(数据):1
输出插入数据的有序数组:arr ={1,2,3,6,89}

第二种插入数组之间
有序数组:arr ={2,3,6,89}
插入的记录(数据):5
返回的有序数组:arr ={2,3,5,6,89}

第二种尾插法
有序数组:arr ={2,3,6,89}
插入的记录(数据):100
返回的有序数组:arr ={2,3,6,89,100}

3,java代码实现

package sort;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * project_name: JavaDemo
 * filename:  InsertSort
 * IDE:   IntelliJ IDEA
 * author: ganxiang
 * CreateDate:2020-07-18 16:04
 */
public class InsertSort {

    //头插法
    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;
        }
//        System.out.println(Arrays.toString(a));
        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 ={2,3,6,89};
        System.out.println("输入的有序数组arr为:"+Arrays.toString(arr));
        System.out.println("1,头插法插入数据1后的有序数组为:"+new InsertSort().insertHead(arr,1));
        System.out.println("2,在数组之中插入数据5后有序的数组为:"+new InsertSort().insertBody(arr,5));
        System.out.println("3,尾插法插入数据100后的有序数组为:"+new InsertSort().insertTial(arr,100));
    }


}

4,运行结果

在这里插入图片描述

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值