zoukankan      html  css  js  c++  java
  • 插入排序算法的JAVA实现

    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);
        }
    }
  • 相关阅读:
    进程池,线程池,协程,gevent模块,协程实现单线程服务端与多线程客户端通信,IO模型
    线程相关 GIL queue event 死锁与递归锁 信号量l
    生产者消费者模型 线程相关
    进程的开启方式 进程的join方法 进程间的内存隔离 其他相关方法 守护进程 互斥锁
    udp协议 及相关 利用tcp上传文件 socketserver服务
    socket套接字 tcp协议下的粘包处理
    常用模块的完善 random shutil shevle 三流 logging
    day 29 元类
    Django入门
    MySQL多表查询
  • 原文地址:https://www.cnblogs.com/hapjin/p/4474126.html
Copyright © 2011-2022 走看看