算法及优化集锦——插入排序

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:采用双向链表插入。。。。。。数据

相关文章
相关标签/搜索