java实现插入排序

  • 插入排序

        将数组看成是两部分,前部分是有序的,后部分是无序的。将无序的数组逐个插入有序的数组中。

java实现

public int[] insertSort(int[] a){
        int len = a.length;
        for(int i=1;i<len;i++){
            int key = a[i];
            System.out.println("key:"+key);
            int j=i-1;
            while(j>=0&&a[j]>key){  //注意使用while,不要使用for
                a[j+1]=a[j];
                j--;
            }
            a[j+1]=key;
        }
        return a;
    }
  • 冒泡排序

  两个指针,循环2遍,时间复杂度O(n2)

  java实现

public int[] bubbleSort(int[] a){
        for(int i=a.length-1;i>=0;i--){
            for(int j=0;j<i;j++){
                if(a[j]>a[j+1]){  
                    int temp=a[j+1];
                    a[j+1]=a[j];
                    a[j]=temp;
                }
            }
            //System.out.println("a:"+i+":"+a[i]);
        }
        return a;
}

  那么书上经常说的最佳的情况下,时间复杂度是O(n),是怎么得来的呢?答案:是对代码进行了优化的,当在一次遍历的时候,若排列有序了,就终止下一次遍历。

public int[] bubbleSort(int[] a){
        boolean didSwap = false;
        for(int i=a.length-1;i>=0;i--){
            for(int j=0;j<i;j++){
                if(a[j]>a[j+1]){  
                    int temp=a[j+1];
                    a[j+1]=a[j];
                    a[j]=temp;
                    didSwap = true;
                }
            }
            if(didSwap==false){
               break;
            }
        }
        return a;
}    

 

posted @ 2014-04-09 22:41  EchoLee  阅读(191)  评论(0编辑  收藏  举报