码迷,mamicode.com
首页 > 编程语言 > 详细

插入排序算法的JAVA实现

时间:2015-05-03 17:14:15      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

1,对元素进行排列时,元素之间需要进行比较,因此需要实现Comparable<T>接口。即,<T extends Comparable<T>>. 更进一步,如果允许待比较的类型可以和它的父类型进行比较,则需要写成:<T extends Comparable<? super T>, 其中<? super T> 表示 T 的任意超类。

2,InsertionSortArray.java 类实现了从小到大顺序以插入排序的方式对数据进行排序。

3,insertionSort方法负责对每一个元素进行排序,insertInOrder方法将待排序的元素插入到合适的位置,相当于执行具体的操作。

具体代码如下:

public class InsertionSortArray {
    public static <T extends Comparable<? super T>> void insertSort(T[] a, int n){
        insertionSort(a, 0, n - 1);//对序列a进行排序,其起始索引为0,最后元素的索引为n-1
    }
    
    //从索引first到last执行插入排序
    private static <T extends Comparable<? super T>> void insertionSort(T[] a, int first, int last){
        for(int unsorted = first + 1; unsorted <= last; unsorted++){//插入排序中第一个元素视为有序,故从第二个元素开始
            T firstUnsorted = a[unsorted];//获得待排序的元素
            insertInOrder(firstUnsorted, a, first, unsorted - 1);//将之插入到合适的位置
        }
    }
    
    //将element插入到已经排好序的,起始位置为begin,终止位置为end的 序列中
    private static <T extends Comparable<? super T>> void insertInOrder(T element, T[] a, int begin, int end){
        int index = end;
        //待插入的元素依次从后往前与已排序好的元素进行比较,直至找到比它小的元素为止
        while((index >= begin) && (element.compareTo(a[index]) < 0)){
            a[index + 1] = a[index];//将元素后移一位,a[index+1]其实就是element
            index--;
        }
        a[index + 1] = element;//将element插入到合适的位置
    }
}

 

4,在实现排序时,我们使用了泛型。使用泛型的好处是:对于任何类型的对象,只要它实现了Comparable接口,就可以通过调用compareTo方法对之进行比较。

因此,它还可以对自定义类型的对象进行排序,只要你定义的类实现Comparable接口就可以了。

以下测试类中定义了String类型数组和Integer类型的数组,并都可以调用插入排序的方法进行排序,代码如下:

public class TestSort {
    public static void main(String[] args) {
        String[] arr = {"hello","world","hadoop","hbase","hive"};
        InsertionSortArray.insertSort(arr, arr.length);
        System.out.println("字符串排序结果");
        for(String str : arr)
            System.out.println(str);
        Integer[] integer = {1,5,3,8,10,4};
        InsertionSortArray.insertSort(integer, integer.length);
        System.out.println("整数排序结果");
        for(int i : integer)
            System.out.println(i);
    }
}

 

插入排序算法的JAVA实现

标签:

原文地址:http://www.cnblogs.com/hapjin/p/4474126.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!