算法及優化集錦——插入排序

public class Insert_Sort {
   public int[] Sort(int data[]){              
       for(int i=1;i<data.length;i++){             
           int key=data[i];
           int j=i-1;
           while(j>=0&& data[j]>key){
               data[j+1]=data[j];
               j--;
           }
           data[j+1]=key;
       }
       return data;
   }
}算法

時間複雜度:最佳狀況下:O(n),最壞狀況下:O(n^2) 參考算法導論數組

影響因素:存儲的數據結構數據結構

設想優化1:運用折半思想:優化

 public int[] Sort(int data[]){
       for(int i=1;i<data.length;i++){
           int key=data[i];
           int j=i-1;
           int half=i/2;
           if(data[half]<key){
               while(j>=half&&data[j]>key){
                   data[j+1]=data[j];
                   j--;
               }
           }else if(data[half]>key){
               while(j>=0&&data[j]>key){
                   data[j+1]=data[j];
                   j--;
               }
        }
           data[j+1]=key;
       }
       return data;
   }class

結果優化失敗,緣由:須要後移的次數與比較次數無關,數組的數據結構決定了其插入特性。鏈表

設想優化2:採用雙向鏈表插入。。。。。。數據

相關文章
相關標籤/搜索