Insertion Sort

1. 直接插入排序算法:

 

代码
         ///   <summary>
        
///  插入排序
        
///   </summary>
        
///   <param name="data"></param>
         public   static   void  InsertionSort( int [] data)
        {
            
if  (data  ==   null   ||  data.Length  <   1 )
            {
                
throw   new  ArgumentNullException( " data " );
            }

            
int  temp, index;
            
for  ( int  i  =   1 ; i  <  data.Length; i ++ )
            {
                temp 
=  data[i];
                index 
=  i;

                
while  (index  >   0   &&  temp  <  data[index  -   1 ])
                {
                    data[index] 
=  data[ -- index];
                }
                data[index] 
=  temp;
            }
        }

 

2. 折半插入排序:

 

代码
         ///   <summary>
        
///  折半插入排序
        
///   </summary>
        
///   <param name="data"></param>
         public   static   void  Bin_InsertionSort( int [] data)
        {
            
if  (data  ==   null   ||  data.Length  <   1 )
            {
                
throw   new  ArgumentNullException( " data " );
            }

            
int  low, mid, high;
            
for  ( int  i  =   1 ; i  <  data.Length; i ++ )
            {
                
//  折半查找
                low  =   0 ;
                high 
=  i  -   1 ;
                
while  (low  <=  high)
                {
                    mid 
=  (low  +  high)  /   2 ;
                    
if  (data[i]  <  data[mid])
                    {
                        high 
=  mid  -   1 ;
                    }
                    
else
                    {
                        
if  (data[i]  >  data[mid])
                        {
                            low 
=  mid  +   1 ;
                        }
                        
else
                        {
                            low 
=  mid;
                            
break ;
                        }
                    }                    
                }

                
//  移动元素
                 int  temp  =  data[i];
                
for  ( int  j  =  i; j  >  low; j -- )
                {
                    data[j] 
=  data[j  -   1 ];
                }
                data[low] 
=  temp;
            }
        }

 

 

 

你可能感兴趣的:(insert)