首页 > 其他 > 详细

java排序算法-插入排序

时间:2014-03-12 02:08:13      阅读:213      评论:0      收藏:0      [点我收藏+]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
public class InsertSortUtils {
    public static void main(String[] args) {
        insertSortTest();
        shellSortTest();
    }
 
    private static void insertSortTest() {
        int[] values = { 5, 2, 4, 1, 3 };
        System.out.print("直接插入排序前: ");
        Utils.printArray(values);
        insertSort(values);
        System.out.print("直接插入排序后: ");
        Utils.printArray(values);
    }
 
    private static void shellSortTest() {
        int[] sortArray = { 5, 2, 4, 1, 3 };
        System.out.print("希尔排序前: ");
        Utils.printArray(sortArray);
        shellSort(sortArray);
        System.out.print("希尔排序后: ");
        Utils.printArray(sortArray);
    }
     
    public static void insertSort(int[] arr) {
        int temp;
        int j = 0;
        for (int i = 1; i < arr.length; i++) {
            // 此处的判断很重要,这里体现了插入排序比冒泡排序和选择排序快的原因。
            if (arr[i] < arr[i - 1]) {
                temp = arr[i];
                // 数据往后移动
                for (j = i - 1; j >= 0 && temp < arr[j]; j--) {
                    arr[j + 1] = arr[j];
                }
                // 将数据插入到j+1位置
                arr[j + 1] = temp;
//              System.out.print("第" + (i) + "次:");
//              Utils.printArray(values);
            }
        }
    }
     
    public static void shellSort(int[] arr) {
        int tmp; // 暂存变量
        int arrLen = arr.length;
        int step = arrLen/2; // 初始集合间隔长度
        int pointer; // 进行处理的位置
 
        while(step > 0){
            // 对各个集合进行处理
            for (int j = step; j < arrLen; j++) {
                tmp = arr[j]; // 暂存Data[j]的值,待交换值时用
                pointer = j - step; // 计算进行处理的位置
 
                // 进行集合内数值的比较与交换值
                while (pointer >= 0 && pointer < arrLen && tmp < arr[pointer]) {
                    arr[pointer + step] = arr[pointer];
 
                    // 计算下一个欲进行处理的位置
                    pointer = pointer - step;
                }
                // 与最后的数值交换
                arr[pointer + step] = tmp;
            }
            step /= 2;// 计算下次分割的间隔长度
        }
    }
}

  

java排序算法-插入排序,布布扣,bubuko.com

java排序算法-插入排序

原文:http://www.cnblogs.com/zhaofeng555/p/3594874.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!