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

猜你喜欢

转载自www.cnblogs.com/liwei2018/p/8955839.html