Accp java 插入排序

问题描述:
有一个有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,解决这种为题的方法用到一种新的排序方法——插入排序法。
具体算法描述如下:
  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  5. 将新元素插入到下一位置中
  6. 重复步骤2
以下是java版插入排序的实现过程。
实现的步骤:

1. 创建一个有序的数列,此数列称为源数组。
Int []num={1,2,3,5,6,7}

2. 从控制台接收一个插入的数是4
Scanner input=new Scanner(System.in);
Int n=input.nextInt();

3. 当把4插入进源数组后,就应该有一个新数组比源数组的个数多一个,
所以,创建一个新数组。
Int []newNum=new int[num.length+1];

4. 需要把源数组的值放入新数组
for(int i=0;i<newNum.length;i++)
{
newNum[i]=num[i];
}

经过这样的赋值数组就变成了如图所示:

5.用插入的数字4和源数组的每一个数比较来确定4要插入的位置。 红色数字是下标

定义一个插入的位置:
Int index=0;
循环比较,如果插入数n=4比源数组里的某一个数大,那就把4放入该数的后面
for(int i=0;i<newNum.length;i++)
{
If(n>newNum[i])
Index=i+1;
}

5. 确定好插入数位置后,就要把该位置后面的数字向上移动,请注意:移动的时候一定从最后一个开始。也就是先把数字7移动下标为6的位置,再把数字6移动到下标为5的位置,以此类推。
for(int i=newNum.length-1;i>index;i--)
{
newNum[i]=newNum[i-1];
}

6. 通过以上的移动已经把index位置空出来,接下来就要把n=4放在index位置
newNum[index]=4;

7. 最后输出newNum新数组的所有值
for(int i=0;i<newNum.length;i++)
{
System.out.println(newNum[i]);
}

北大青鸟通州版权所有

北大青鸟网上报名
北大青鸟招生简章