06如何在⼀个有序数组中插⼊⼀个数据并使新数组保持有序
(默认升序)
如何在⼀个有序数组中插⼊⼀个数据并使新数组保持有序(默认升序)
准备⼯作
import java.util.Scanner;
public class TestClass01 {
public static void main(String[] args) {
//在有序数组中插⼊⼀个元素,使得插⼊后所有的元素也保持有序,这⾥以升序为例
int[] number={1,5,7,9};
int[] number01=new int[number.length+1];//定义⼀个新数组,长度为⽼数组长度+!
System.out.println("要插⼊元素的有序数组如下所⽰:");
for (int i = 0; i < number.length; i++) {
System.out.print(number[i]+"\t");
}
System.out.println();
System.out.println("请输⼊插⼊的数");
Scanner scanner=new Scanner(System.in);
int insert_Int();
}
}
第⼀种后移法
思路:
第⼀步:到插⼊的下标
分三种情况:
第⼀种:当插⼊的元素值⼩于等于⽼数组的第⼀个值时,插⼊的下标为0
第⼆种:当插⼊的元素值⼤于等于⽼数组的最后⼀个值时,插⼊的下标为数组长度
第三种:正常进⾏注意部分的判断
第⼆步:把旧数组的插⼊下标之前的数据全部赋值给新数组
第三步:把插⼊的值赋值到新数组的插⼊下标的位置
第四步:把旧数组的插⼊下标以及之后的数据依次赋值给新数组插⼊下标+1及之后的位置(每次新数组接收都要加1)
//第⼀种⽅法,后移法
//第⼀步,先到插⼊的位置
int index=0;//定义⼀个变量存放插⼊的位置
//从原数组⾥⾯
//有三种情况,第⼀种,插⼊的元素⼩于等于第⼀个元素,第⼆种情况在插⼊的数在中间位置,第三种情况为插⼊的数⼤于等于最后⼀个元素 if(insert_number<=number[0]){
index=0; //第⼀种情况
}else if(insert_number>=number[number.length-1]){
index=number.length;//第三种情况
}else{
for (int i = 0; i < number.length-1; i++) {
if(number[i]<=insert_number&&number[i+1]>=insert_number){
index=i+1; //第⼆种情况
break;
}
}
}
//第⼆步,把⽼数组插⼊位置前的数据全部赋值给新数组
for (int i = 0; i < index; i++) {
number01[i]= number[i];
}
//第三步,把插⼊的值赋值给新数组的插⼊位置
number01[index]=insert_number;
//第四步,把⽼数组剩下的数据依次赋值给新数组插⼊位置后
for (int i = index; i <number.length; i++) {
number01[i+1]= number[i];
}
//第五步,验证:插⼊后排序
System.out.println("输出插⼊数据"+insert_number+"后排序的数组如下所⽰");
for (int i = 0; i < number01.length; i++) {
System.out.print(number01[i]+"\t");
}
注意:插⼊下标应该满⾜:使得该位置的前⼀个数⼩于等于插⼊的数据,该位置的的后⼀个数⼤于等于插⼊的数据
第⼆种插⼊位置放最后,然后两两⽐较
思路:
第⼀步:把旧数组的数据全部赋值给新数组的数据
第⼆步:把插⼊的元素放⼊新数组的最后⼀个位置
第三步:从新数组的末尾开始遍历整个新数组,如果当前位置的元素⽐前⾯⼀个位置的元素⼩,那么就把他们之前进⾏交换,交换完所有的之后就排序完成了.
//第⼆种⽅法,放最后依次相⽐法
//第⼀步,把⽼数组的元素全部赋值给新数组
for (int i = 0; i < number.length; i++) {
number01[i]= number[i];
}
//第⼆步,把插⼊的元素放⼊新数组的最后⼀个位置
number01[number01.length-1]=insert_number;
//第三步,从新数组的最后⼀个元素起开始遍历整个,数组
// 若当前位置的元素⽐前⾯⼀个元素的值⼩,则进⾏两两交换
//直到遍历结束,此时新数组排序已经成功
for (int i = number01.length-1; i>0; i--) {
//⽐它⼩就互换,因为是升序,遍历到第⼀个元素的时候就不需要⽐较了,所以i⽆需等于0
if(number01[i]<number01[i-1]){
int temp=number01[i];//定义⼀个临时变量⽤来进⾏数据交换
java定义一维数组并赋值number01[i]=number01[i-1];
number01[i-1]=temp;
}
}
//第四步,验证是否排序成功
System.out.println("输出插⼊数据"+insert_number+"后排序的数组如下所⽰");
for (int i = 0; i < number01.length; i++) {
System.out.print(number01[i]+"\t");
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论