码迷,mamicode.com
首页 > 编程语言 > 详细

插入排序的算法描述和分析

时间:2020-03-31 16:06:36      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:else   比较   它的   lag   实现   length   dex   额外   ==   

插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。
  它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,
  通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,
  需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
  时间复杂度:最佳为o(n):因为如果是已经排序好的序列话,它每次只需和前面已排序好的序列比较一次,总共比较n次,也是可以通过flag实现的,然后最差时间复杂度(平均为)为o(n^2)

package sort;

/**
 * @author wyc
 * 插入排序
 */
public class InsertionSort {
    public static void main(String[] args) {
        /*int[] arrays = {1,11,12,4,2,6,9,0,3,7,8,2};*/
        int[] arrays = {12,11,10,9,8};
        int[] sortArray = new int[arrays.length];
        insertionSorting(arrays, sortArray);
        for(int value : sortArray){
            System.out.print(value+",");
            
        }
        System.out.print("           "+sortArray.length);
    }
    
    private static void insertionSorting(int[] array,int[] sortArray){
        sortArray[0] = array[0];
        for(int j = 1;j < array.length;j++){
            for(int i = j-1,flag = 1; i >= 0;i--){
                if(array[j] > sortArray[i]){
                    swap(sortArray,i,i+1);
                    if(flag == 1){
                        sortArray[i] = array[j];
                        flag = 0;
                    }
                }else{
                    if(flag == 1){
                        sortArray[i+1] = array[j];
                        break;
                    }
                }
            }
        }
    }
    
    private static void swap(int[] arrays,int index,int index1){
        arrays[index] = arrays[index] + arrays[index1];
        arrays[index1] = arrays[index] - arrays[index1];
        arrays[index] = arrays[index] - arrays[index1];
    }
}

 

插入排序的算法描述和分析

标签:else   比较   它的   lag   实现   length   dex   额外   ==   

原文地址:https://www.cnblogs.com/nyhhd/p/12605713.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!