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

原创 2018年04月17日 20:27:17
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);
}


}

数据结构JAVA版2017教学视频课程

-
  • 1970年01月01日 08:00

数据结构 - 2-路插入排序 详解 及 代码(C++)

2-路插入排序 详解 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24267679 2-路插入排序的思想很有意...
  • u012515223
  • u012515223
  • 2014-04-21 18:50:01
  • 3313

插入排序:二路插入

在上一篇博客中:插入排序:直接插入、交换插入、折半插入。提到了三种插入排序的具体实现。不过仍有改进的地方。例如序列 2 1 3,当把1往前插入时,由于1...
  • zhangxiangDavaid
  • zhangxiangDavaid
  • 2014-06-01 15:47:26
  • 3360

排序算法之三 2-路插入排序

这次要谈的插入排序算法就是2-路插入排序,2-路插入算法是在折半插入排序的基础上改进 它的目的就是想减少数据的移动次数,因此,另外开辟辅助空间。首先开辟一个长度为iLength的临时数组,将待排序数...
  • onedreamer
  • onedreamer
  • 2011-09-03 09:50:26
  • 6583

java实现排序算法之2-路插入排序,直接插入排序,折半插入排序

package insert; import java.util.Arrays; /**  * @author  */ public class InsertSort { ...
  • fanfan199312
  • fanfan199312
  • 2015-08-18 16:18:53
  • 236

直接插入排序,折半插入排序,2-路插入排序,希尔排序

#include using namespace std; #define MAX 20 typedef int SqList[MAX]; void InsertSort(SqList &L,in...
  • weichanjuan3
  • weichanjuan3
  • 2015-06-16 14:21:52
  • 492

Java实现排序算法之 - 插入排序

生活情景: 不知道大家在生活中是如何思考排序这件事情的,就我来说,在打扑克牌(十三张那种哈)的时候,每拿到派发的一张牌, 就会将这张牌插入到合适的位置,这样每次插完之后就是得到了一次排好序的牌。插...
  • Joseph_Cherry
  • Joseph_Cherry
  • 2017-03-07 23:28:49
  • 2704

插入排序:2路插入排序原理分析及源码演示

原理2路插入排序是在直接插入排序的基础上进行优化:减少排序过程中元素移动的次数。不过需要额外增加n个辅助空间。关键思路把新增的辅助空间(n个元素的数组),当做一个环对待,再第一个元素插入之后(标记当前...
  • scuyxi
  • scuyxi
  • 2017-04-23 22:07:18
  • 372

排序算法之直接插入排序的思想以及Java实现

1,基本思想 假设待排序的数据是数组A[1….n]。初始时,A[1]自成1个有序区,无序区为A[2….n]。在排序的过程中,依次将A[i] (i=2,3,….,n)从后往前插入到前面已排好序的子数组...
  • whq19890827
  • whq19890827
  • 2016-08-10 22:44:36
  • 2151

插入排序之2路插入排序

#include #include #define MAXSIZE 20 #define SIZE 100 typedef int KeyType ; typedef char InfoType ...
  • jimolangge123
  • jimolangge123
  • 2014-08-22 09:36:52
  • 311
收藏助手
不良信息举报
您举报文章:JAVA实现排序-插入排序-2路插入排序
举报原因:
原因补充:

(最多只允许输入30个字)