美文网首页
java-四种排序算法

java-四种排序算法

作者: 夜雨辉晨 | 来源:发表于2018-03-09 21:41 被阅读0次

复习java基础的时候,顺手写的。代码比较丑……
1、直接插入排序

public static <T extends Comparable<T>> T[] straight_insert_sorting(T []ts){
    int len = ts.length;
    T temp;
    for(int i=1; i<len; i++)
    {
        temp = ts[i];
        int j = i-1;
        while (j>=0){
            if(temp.compareTo(ts[j]) <= 0)
            {
                ts[j+1] = ts[j];
                j--;
            }
            else {
                ts[j+1] = temp;
                break;
            }
        }
        if(j<0) ts[0] = temp;
    }
    return ts;
}

2、希尔排序

 public static <T extends Comparable<T>> T[]shell_sort(T[]ts){
    int len = ts.length;
    T temp;
    for(int gap = len/2;gap>0;gap/=2){
        for(int j=gap;j<len;j++){
            temp = ts[j];
            while (( (j-gap)>=0 ) && (temp.compareTo(ts[j-gap]) < 0)){
                ts[j] = ts[j-gap];
                j = j-gap;
            }
            ts[j] = temp;
        }
    }
    return ts;
}

3、简单选择排序

 public static <T extends Comparable<T>>T[]select_sort(T[]ts){
    int len = ts.length;
    T min,temp;
    int pos;
    for (int i=0;i<len;i++){
        pos = i;
        min = ts[i];
        for (int j=i+1;j<len;j++){
            if(ts[j].compareTo(min) < 0 )
            {
                min = ts[j];
                pos = j;
            }
        }
        if(pos>i) {
            temp = ts[i];
            ts[i] = ts[pos];
            ts[pos] = temp;
        }
    }
    return ts;
}

4、堆排序

  public static <T extends Comparable<T>>T[]heap_sort(final T[]ts){

    final int len = ts.length;
    class HeapBuilder{
        public  void  build_max_heap(){
            for (int i = (len-2)/2;i>=0;i--){
                max_heap(i,len);
            }
        }

        void max_heap(int root,int len){
          //  System.out.println("root is:"+ts[root]);
            int left = 2 * root + 1;
            int right = left + 1;
            int largest = left;

            if (left > len-1) return;
            if ((right < len-1) && ts[right].compareTo(ts[largest])>0 )
                largest = right;
            if(ts[root].compareTo(ts[largest]) > 0) largest = root;

            if(ts[root].compareTo(ts[largest]) < 0) {
                T temp = ts[root];
                ts[root] = ts[largest];
                ts[largest] = temp;
                max_heap(largest,len);
            }
            
        }
    }
    HeapBuilder hb = new HeapBuilder();
    hb.build_max_heap();
    for (int i=len-1;i>=1;i--){
        /*System.out.print("\nheap:");
        for (T t:ts)
            System.out.print(t.toString()+" ");*/

        T temp = ts[i];
        ts[i] = ts[0];
        ts[0] = temp;

        if(i==1) break;

        hb.max_heap(0,i);
    }

    return ts;
}

相关文章

  • 五种常见排序算法实现(Java)

    Java-五种排序算法实现 前言及准备 这篇我们会介绍比较简单的五种排序算法:插入排序、冒泡排序、快速排序、选择排...

  • java-四种排序算法

    复习java基础的时候,顺手写的。代码比较丑……1、直接插入排序 2、希尔排序 3、简单选择排序 4、堆排序

  • PHP常见排序算法及排序效率

    php 四种排序算法的时间与内置的sort排序比较 3000个元素,四种算法的排序所用的时间比较 冒泡排序 857...

  • JAVA-排序算法

    1. 概述 排序分为内部排序和外部排序,内部排序是待排序的元素全部放在内存,并在内存中调整它们的顺序。外部排序是...

  • 前端常见的四种JavaScript的排序算法

    最近几天总结了一下前端常见的四种JavaScript的排序算法,拿出来给大家分享一下:这四种排序算法依次是冒泡排序...

  • 常见排序算法

    这里介绍四种排序算法,选择排序、快速排序、归并排序、计数排序 选择排序(使用递归) 选择排序(使用循环) 快速排序...

  • 计数排序、基数排序和桶排序

    阅读经典——《算法导论》07 到目前为止,我们已经介绍了插入排序、归并排序、堆排序、快速排序这四种排序算法,他们的...

  • PHP 实现插入排序

    导语 关于排序的算法,就此告一段落。冒泡排序、快速排序、选择排序、加上本篇的插入排序,这四种算法都是相对简单,容易...

  • Golang包——sort

    sort 包 在内部实现了四种基本的排序算法:插入排序(insertionSort)、归并排序(symMerge)...

  • Java选择排序、冒泡排序、直接插入排序与二分查找

    介绍一下四种Java的经典算法,这四种算法是非常基础的算法,学算法对我们深入理解程序有很大帮助。 选择排序 冒泡排...

网友评论

      本文标题:java-四种排序算法

      本文链接:https://www.haomeiwen.com/subject/cteyfftx.html