java实现常用的排序算法2-插入排序
Posted liwei2018
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java实现常用的排序算法2-插入排序相关的知识,希望对你有一定的参考价值。
选择排序和冒泡排序执行了相同次数的比较,一样的时间复杂度:O(N^2),选择排序中减少了元素之间的交换次数。
插入排序:对一组无序数组,在数组中选择一个作为标记的元素,在这个标记的元素的左边都是已经有序的(第一次的标记是下标为1的元素),这意味着标记元素的左边都是已经有序的,而右边都是无序的。此时要将标记的元素,插入到左边已经排好序的元素中去;
插入到左边的有序元素中的思想为:将被标记的元素出列(存入临时变量中),然后依次和左边的元素进行比较,如果比较的元素比标记的元素大,则被比较的元素需要向右移。
java代码如下:
package algorithm;
public class InsertSort{
private long[] a;
private int nElement;
public InsertSort(int max){
a=new long[max];
nElement=0;
}
public void insert(long element){
a[nElement]=element;
nElement++;
}
public void display(){
for(int j=0;j<nElement;j++){
System.out.println(a[j]+" ");
}
}
public void insertSort(){
for(int out=1;out< nElement;out++){
long temp=a[out];
int in=out;
while (in>0&&a[in-1]>temp){
a[in]=a[in-1];
--in;
}
a[in]=temp;
}
}
}
测试代码:
package algorithm;
import org.junit.Before;
import org.junit.Test;
public class InsertSortTest {
private InsertSort testObject=new InsertSort(20);
@Before
public void init(){
testObject.insert(5442l);
testObject.insert(8999l);
testObject.insert(65l);
testObject.insert(11189l);
testObject.insert(12l);
testObject.insert(20l);
testObject.insert(1990l);
testObject.insert(89l);
testObject.insert(58l);
testObject.insert(29l);
}
@Test
public void test1(){
testObject.display();
System.out.println("before");
testObject.insertSort();
testObject.display();
System.out.println("after");
}
}
运行结果:
5442 8999 65 11189 12 20 1990 89 58 29 before
12 20 29 58 65 89 1990 5442 8999 11189 after
以上是关于java实现常用的排序算法2-插入排序的主要内容,如果未能解决你的问题,请参考以下文章