插入排序(直接插入排序折半插入排序)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入排序(直接插入排序折半插入排序)相关的知识,希望对你有一定的参考价值。

一、直接插入排序

package algorithm.sort.compare.insert;
 
import java.util.Arrays;
 

public class DirectInsertSort {
    public static void main(String[] args) {
        int[] arrayA = new int[] {11, 213, 134, 65, 77, 78, 23, 43};
        directInsertSort (arrayA);
        System.out.println (Arrays.toString (arrayA));
    }
        
        
        
        
    public static void directInsertSort ( int[] array ){
        for ( int i = 1; i < array.length; i++ ){
            int j;
            int temp = array[i];
            for ( j = i; j > 0; j-- ){
                if (array[j - 1] > temp)              
                    array[j] = array[j - 1];             
                else              
                    break;               
            }
            array[j] = temp;
        }
    }
   
   
   
 
}
 

 

 

二、折半插入排序

折半插入排序(binary insertion sort)是对插入排序算法的一种改进。

package algorithm.sort.compare.insert;
 
import java.util.Arrays;
 
 
public class BinaryInsertSort {         
    public static void main(String[] args) {
        int[] arrayA = new int[] { 11, 213, 134, 65, 77, 78, 23, 43 };
        binaryInsertSort (arrayA);
        System.out.println (Arrays.toString (arrayA));
    }
        
        
        
        
    private static void binaryInsertSort ( int[] array ){
        for ( int i = 1; i < array.length; i++ ){
            // if (array[i] > array[i - 1]) // 从大到小
            if (array[i] < array[i - 1]){ // 从小到大         
                int tmp = array[i];
                int low = 0;
                int high = i - 1;
                while (low <= high){
                    int mid = ( low + high ) >>> 1;
                    // if (array[mid] > tmp) // 从大到小
                    if (array[mid] < tmp)// 从小到大                  
                        low = mid + 1;                  
                    else                  
                        high = mid - 1;                 
                }
                for ( int j = i; j > low; j-- )              
                    array[j] = array[j - 1];              
                array[low] = tmp;
            }
        }
    }
   
   
   
 
}
 

 

 

三、希尔排序

希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。

package algorithm.sort.compare.insert;
 
import java.util.Arrays;
 

public class ShellSort {
    public static void main(String[] args) {
        int[] arrayA = new int[] { 213, 134, 65, 77, 78, 23, 43 };
        shellSort (arrayA, 0, arrayA.length);
        System.out.println (Arrays.toString (arrayA));
    }
 
        
        
        
    private static void shellSort ( int[] array, int start, int len ){
        int power = 1;
        while (( power + 1 ) * 2 < len)      
            power = ( power + 1 ) * 2 - 1;       
        for ( int k = power; k >= 1; k = ( k + 1 ) / 2 - 1 ){
            for ( int i = 0; i < k; i++ ){
                if (len - i <= 1)               
                    break;               
                int tmp;
                for ( int j = start + i + k; j < start + len; j += k ){
                    tmp = array[j];
                    int m = j;
                    for ( ; m > start + i; m -= k )
                    {
                        if (array[m - k] > tmp) // 从小到大                       
                            array[m] = array[m - k];                       
                        else                      
                            break;                      
                    }
                    array[m] = tmp;
                }
            }
        }
    }
        
   
   
   
}
 

 

以上是关于插入排序(直接插入排序折半插入排序)的主要内容,如果未能解决你的问题,请参考以下文章

直接插入折半插入希尔排序

直接插入折半插入希尔排序

插入排序(直接插入排序折半插入排序)

实例 | Java 折半插入排序算法及解析

排序算法之插入排序(直接插入排序折半插入排序希尔排序)

插入排序——2折半插入排序实现