數據結構與算法——直接插入排序


算法描述:

       直接插入排序算法:插入表示將一個新的數據插入到一個已經排好序的有序數表中,並繼續保持有序。例如有一個長度為n的無序數組,進行n-1次的插入就能完成排序。第一次,數組第1個數認為是有序的數組,將數組第2個元素插入僅有1個有序的數組中。第2次,數組前兩個元素組成有序的數組,將數組第3個元素插入由兩個元素構成的有序數組中......。第n-1次,數組前n-1個元素組成有序的數組,將數組的第n個元素插入由n-1個元素構成的有序數組中,則完成了整個插入排序。

代碼實現:

 1 public class InsertSort {
 2     public void insertSort(int[] arr) {
 3         if(arr==null || arr.length==1) {
 4             return;
 5         }
 6         int len=arr.length;
 7         for(int i=1;i<len;i++) {
 8             int j;
 9             int temp=arr[i];
10             for(j=i-1;j>=0 && arr[j]>temp;j--) { 
11                 arr[j+1]=arr[j];
12             }
13             arr[j+1]=temp;
14         }
15     }
16 }

直接插入排序算法的時間復雜度分析

       插入排序算法的時間復雜度就是比較的次數,而比較的次數與待排數組的初始順序有關,當待排數組有序(順序)時,沒有移動操作,此時該算法的時間復雜度為O(n)。當待排數組是逆序時,比較次數達到最大(最壞的情況),此時該算法的時間復雜度為O(n2)。

      算法的空間復雜度:O(1)

      算法的穩定性:直接插入排序算法是穩定的(數組中有相同的元素時,排序后並不替換位置)

      直接插入排序算法比冒泡和簡單選擇排序算法的性能要好一些


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM