解析插入排序

先从一段代码说起:

package insert;

public class InsertSort {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

//int[] array = {2,1, 5, 3, 8,20,7};

//int[] array = {2,1, 5, 3, 8,20,10};

//int[] array = {2,1, 5, 3, 8,20,6};

//int[] array = {2,1, 5, 3, 8,  7,10,23,55,31};

int[] array = {2,1, 5, 3, 8,  7,10,23,55,31,103,102,105,32,32,32,30,30,100,33,32,100,105,107,106,103,102,104};

insertSort(array, array.length);

}

public static void insertSort(int[] array, int len)

{

int i, j, k;

for(i = 0; i < len; i++)

{

int num = -1;

int key = -1;

for( j = 0; j < i; j++)

{

if( array[i] < array[j])

{

num = j;

key = array[i];

break;

}

}

if( num >= 0)

{

int[] temp = new int[i – num];

for( k = num; k < i; k++ )

{

temp[k – num] = array[k];

}

for( k = num; k < i; k++ )

{

array[k + 1] = temp[k – num];

}

array[num] = key;

}

}

for( i = 0; i < len; i++)

{

System.out.println( ” ” + array[i]);

}

}

}

这段程序代码实现了插入排序的功能,也符合人们视线排序算法的常有思路,但是代码冗余度非常大。那么如何改写代码,减少上述代码里面的冗余代码呢?

先看《算法导论》里插入排序的伪代码:

                                                                                                                                                                               

点赞