zoukankan      html  css  js  c++  java
  • 插入排序——java实现

    插入排序的基本思想就是遍历一边列表,将a[i]依次通过a[i-1]、a[i-2]、a[i-3]...依次比较并交换位置的方式插入合适的位置。

    for: i from 0~n-1{

      for: j from i~0

        if(a[j] <= a[j-1]) 交换a[j]和a[j-1] break;

    }

     1 package 排序;
     2 
     3 import edu.princeton.cs.algs4.In;
     4 import edu.princeton.cs.algs4.StdOut;
     5 
     6 /**
     7  * 插入排序所需额时间取决于输入中元素的初始顺序。
     8  * 例如,对一个很大的且其中的元素已经有序或接近有序的数组进行排序会比对随机顺序的数组或是逆序数组进行排序要快的多
     9  *@author evasean www.cnblogs.com/evasean/
    10  *
    11  */
    12 @SuppressWarnings("rawtypes")
    13 public class Insertion插入排序 {
    14     public static void sort(Comparable[] a){
    15         int n = a.length;
    16         for(int i=1 ; i<n; i++){
    17             //将a[i]插入到a[i-1]、a[i-2]、a[i-3]...之中
    18             for(int j= i; j>0 && less(a[j],a[j-1]);j--)
    19                 exch(a,j,j-1);
    20         }
    21     }
    22     @SuppressWarnings("unchecked")
    23     private static boolean less(Comparable v, Comparable w){
    24         return v.compareTo(w) < 0;
    25     }
    26     private static void exch(Comparable[] a, int i, int j){
    27         Comparable t = a[i];
    28         a[i] = a[j];
    29         a[j] = t;
    30     }
    31     private static void show(Comparable[] a){
    32         for(int i=0; i<a.length; i++) StdOut.print(a[i] + " ");
    33         StdOut.println();
    34     }
    35     public static boolean isSorted(Comparable[] a){
    36         for(int i = 1; i < a.length; i++){
    37             if(less(a[i],a[i-1])) return false;
    38         }
    39         return true;
    40     }
    41     public static void main(String[] args){
    42         String[] a = new In().readAllStrings();
    43         sort(a);
    44         assert isSorted(a);
    45         show(a);
    46     }
    47 }
  • 相关阅读:
    网卡驱动-BD详解(缓存描述符 Buffer Description)
    break&&continue
    C++解析六-继承
    C++解析五-this 指针,指向类的指针
    1-find
    C++解析四-友员函数、内联函数、静态成员
    树形结构节点求和,以及set排序
    java.util.ConcurrentModificationException 解决和for循环时对集合remove操作
    eclipse保存卡死和内存溢出
    关于Eclipse安装了反编译插件,无法查看源码问题
  • 原文地址:https://www.cnblogs.com/evasean/p/7232865.html
Copyright © 2011-2022 走看看