日期:2014-05-20 浏览次数:20671 次
package test; import java.util.Arrays; public class Test { public static void main(String[] args) { int a[] = {1,5,2,6,8,3,10,20,11,0,-5}; insertSort(a); System.err.println(Arrays.toString(a)); } public static void insertSort(int[] a) { int j, tmp; for (int i=1; i<a.length; i++) { //i表示插入次数,共进行n-1次插入 tmp = a[i]; //把待排序元素赋给tmp j = i - 1; while ((j >= 0) && (tmp < a[j])) { a[j+1] = a[j]; j--; } a[j+1]=tmp; } } }
------解决方案--------------------
研究完这个,楼主可以进一步研究折半插入排序。呵呵,其乐无穷。。。
------解决方案--------------------
import java.util.Arrays; public class Test { public static void shiftOneElementToRight(int[] array, int start, int last) { for (int i = last; i >= start; --i) { array[i + 1] = array[i]; } } public static void insertSort(int[] array) { // i = 1,表示从第2个数开始进行插入排序,因为第1个元素认为是已经排好序的 for (int i = 1; i < array.length; ++i) { int n = array[i]; for (int j = 0; j < i; ++j) { // array[i]与它前面的所有数比较,如果array[j]比它大, // 则[j, i-1]之间的数都向后移动一个位置,然后array[j]插入原来的array[i] if (n < array[j]) { shiftOneElementToRight(array, j, i - 1); array[j] = n; break; } } } } public static void main(String[] args) { int[] array = { 2, 3, 5, 4, 4, 1 }; insertSort(array); System.out.println(Arrays.toString(array)); } }