|
|
今天看了下 排序 写的不好 主要写插入和希尔排序 ,我的理解插入排序就是希尔排序增量为1的特殊希尔排序,希尔排序是为了解决插入排序中的数组移动次数太多
import java.util.Arrays;public class StraightSort {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubint a[] = {2,5,24,3,1,15};//System.out.println(Arrays.toString(sort(a)));System.out.println(Arrays.toString(sort2(a,a.length/2)));}/** * 插入排序 直接插入排序 Straight insertion Sort 的基本操作是将记录插入到已经排好的有序表中,从而得到一个新的,记录数增1的有序表 * @param array * @return */public static int[] sort(int array[]){if(array==null)return array;int temp ; //用于存储插入值for(int i = 1 ; i <array.length ; i++){if(array<array[i-1]){temp = array;int j = i-1;for(;j>-1&&array[j]>temp;j--){array[j+1] = array[j];}array[j+1] = temp;}}return array;}/** * 希尔排序 将相距某个“增量”的记录组成一个子序列,这样才能保证在子序列内分别进行直接插入 *排序后得到的结果是基本有序而不是局部有序。 * ----------插入排序实际就是希尔排序 的自增变量开始为1的特殊希尔排序 **/public static int[] sort2(int array[],int increment){//int increment = array.length/2;int temp;while(increment>=1){for(int i = increment;i<array.length;i++){if(array<array[i-increment]){temp = array;int j = i-increment;for(;j>-1&&array[j]>temp;j= j - increment){array[j+increment] = array[j];}array[j+increment] = temp;}}increment = increment/2;}return array;}} |
|