【代码积累】InsertionSort via list

来源:互联网 发布:漫步者da500调音软件 编辑:程序博客网 时间:2024/06/08 05:53
import java.util.Arrays;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.ListIterator;public class Test {public void test() {//int[] test = {5,4,3,2,1};int[] test={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};//int[] test={56,17,18,23,34};insertionSortByList(test);}public void showList(List a) {Iterator ite = a.iterator();while( ite.hasNext() ) {System.out.format("%d ", (int)ite.next());}System.out.format("\r");}public void insertionSortByList(int[] a ) {List list = new LinkedList<>();List newList = new LinkedList<>();//将数组转存到Listfor( int cnt=0;cnt<a.length;cnt++ ) {list.add(a[cnt]);}/*分别从List的左右两边进行处理: * 左边遍历比较,并插入;右边遍历选择,并删除 *  * 利用链表的删除、插入在效率上的优势,优化基于数组进行移位操作的时间复杂度,但是链表会提升空间复杂度,并且链表的遍历效率比数组低*/if( list.size() <= 1 ) {//没必要排序return;}newList.add(list.remove(0));int key = 0;int innerKey = 0;Iterator ite = list.iterator();while( ite.hasNext() ) {key = (int)ite.next();  /*外层循环,每次取原数组(待排序)的第一个数据*//*从后往前比较*/int index = 0;ListIterator innerIte = newList.listIterator(newList.size());while( innerIte.hasPrevious() ) {innerKey = (int)innerIte.previous();if( key >= innerKey ) {   index = innerIte.nextIndex()+1;  /*基于array的算法,这里不用做操作,循环自动结束,直接赋值即可。当key<innerKey时需要将数组移位。*/break;}}/*内层循环结束,将innerKey插入newList中迭代器当前的位置*/newList.add(index, key);ite.remove();//showList(newList);}showList(newList);}//public void testtt() {//Arrays.sort(a);//}}/* * 综述 *  * */