JAVA实现排序-插入排序-2路插入排序

package insert;
/*
 * 二路插入排序算法
 * 利用新的数组b[]来暂时存储对原数组a[]操作后的结果
 * 首先将a[0]赋值给b[0]
 * 从i=1,开始至i<length,遍历length-1次,每次处理a[i],看将其放到b[]中什么位置
 * 首先判断,如果a[i]大于a[0],则将其放到b[0]之后(需要按照插入排序放,将b[0]后的数组看成递增数组)
 * 如果a[i]小于a[0],则将其放到b[0]之前,在这里为了节省空间,也便于操作,我们利用循环数组原理,将数组最后的几个设置为b[0]的前面
 * (同样按照插入排序放,将b[0]之前的数组看成递增数组
 */
public class TwoLuInsert {
public static void print(int[] arr){
for(int n=0;n<arr.length;n++){
System.out.print(arr[n]+" ");
}
System.out.println();
}
static void fun(int[] a){
int length = a.length;
int[] b = new int[length];
b[0] = a[0];
int first = 0;//头指针
int finals = 0;//尾指针
System.out.print(1+"次 ");
print(b);
for(int i=1;i<length;i++){
if(a[i]>=b[0]){
int j;
for(j=finals;j>=0 && a[i]<b[j];j--){
b[j+1] = b[j];
}
b[j+1] = a[i];
System.out.print(i+1+"次 ");
print(b);
finals++;
continue;
}else{
if(first==0){
first =length-1;
}
int j;
for(j=first;j<length && a[i]>b[j];j++){
b[j-1] = b[j];
}
b[j-1] = a[i];
System.out.print(i+1+"次 ");
print(b);
first--;
continue;
}
}
}

public static void main(String[] args) {
int[] arr = {49,38,65,97,76,13,27,49};
fun(arr);
}


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值