选择排序和冒泡排序执行了相同次数的比较,一样的时间复杂度: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
原文地址:https://www.cnblogs.com/liwei2018/p/8955839.html
时间: 2024-10-09 21:40:00