算法学习-1 插入排序

算法学习-1  插入排序

一、描述:

  比如说我们玩扑克牌,规定每抓一张牌都要保证左边数字最小;抓第一张牌直接放手里就可以,抓第二张时如果比第一张小,则把它放到第一张牌的左边,假如每张抓来的牌放到手中都有固定位置,第一张为A[0],第二张为A[1],第三张为A[2],如果抓的第三张牌比第一张抓来的牌小,则将其放在A[0]处,对应的第二张牌就应该放在A[1],以此类推。

二、java代码实现

public class InsertSort {
    //排序后的数组
    int sorted[];
    public static void main(String[] args) {
        //定义一个待排序的数组
        final int value[]={1,2,3,5,4,1,5,9,6,2,1,4,5,2,35,8,5};
        InsertSort is = new InsertSort();
        is.initArray(value.length);
        for(int i = 0 ; i < value.length;i++){
        is.sort(i,value[i]);
        }
        is.display();

    }
    //初始化数组
    public void initArray(int size){
        this.sorted = new int[size];
    }
    public void sort(int pos,int value){
        //当前“指针”位置
        int i = pos;
        //i=0时,直接插入sorted数组
        if(i==0){
            sorted[i]=value;
        }else{
            //进入这里的i的最小值为1,数组从0开始,sorted[0]的值与新来的value值对比
            while(i>0 && sorted[i-1]>value){
                //向后移位 并
                sorted[i]=sorted[i-1];
                sorted[i-1]=value;
                i--;
            }
            sorted[i]=value;
        }
    }
    //显示
    public void display(){
        for(int i : sorted){
            System.out.print(i+" ");
        }
    }
}

三、总结

插入排序依靠插入完成排序功能。

优点:

  • 当待排序数组是顺序有序的情况下,插入排序是最优性能。
  • 插入排序插入相等数据时,效率很高。

缺点:

  • 待排序数组的数据是随机数据时,插入排序的效率很低。

转载注明出处:http://www.cnblogs.com/xiemubg/p/6748698.html

时间: 2024-08-09 21:59:20

算法学习-1 插入排序的相关文章

经典算法学习——直接插入排序

直接插入排序也是比较简单的排序,基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止.示例代码上传至https://github.com/chenyufeng1991/InsertSort.具体描述如下: 设数组为a[0...n-1], (1)初始时,a[0]自成为一个有序区,无序区为a[1...n-1]. 令i=1; (2)将a[i]并入到当前的有序区a[0...i-1]中形成a[0...i]的有序区间: (3)i++并重复(2)

算法学习:插入排序

插入排序适合用于规模比较小的数据量,且排序程度越高,效率也就越高:但遇到随机数构成的数据量,效率不高 简单代码如下 #include<stdio.h> void quicksort(int array[],int last)//升序排法,直接排法 { int i,j; int temp=0; for(i=1;i<last;i++)//从第二位开始排序,第一位默认不动 { temp=array[i]; j=i-1;//从要排序的后一位开始从末至最前端 //与已排序的数逐一比较,大于temp

[算法学习笔记]直接插入排序笔记

直接插入排序概念: 带排元素放在elem[0...n-1]中,初始化时,elem[0]自成1个有序区,无序区为elem[1...n-1],从i=1起,到i=n-1,依次将elem[i]插入有序区[0...n-1]中 直接插入排序算法步骤: 1.在当前有序区域R[1,i-1]中查找R[i]的正确插入位置K(1<=K<=i-1) 2.将R[K,i-1]中的记录均向后移动 3.移动后腾出K位置,插入R[i] (最坏)时间复杂度:O(n^2) 空间复杂度:O(1) /// <summary>

八大排序算法学习笔记:插入排序(一)

插入排序     包括:直接插入排序,二分插入排序(又称折半插入排序),链表插入排序,希尔排序(又称缩小增量排序).属于稳定排序的一种(通俗地讲,就是两个相等的数不会交换位置) . 直接插入排序: 1.算法的伪代码(这样便于理解):     INSERTION-SORT (A, n)             A[1 . . n] for j ←2 to n do key ← A[ j] i ← j – 1 while i > 0 and A[i] > key do A[i+1] ← A[i]

八大排序算法学习笔记:插入排序(二分插入排序)

二分插入排序   也称折半插入排序, 1.基本思想:设数列[0....n]分为两部分一部分是[0...i]为有序序列,另一部分是[i+1.....n]为无序序列,从无序序列中取一个数 x ,利用二分查找算法找到 x 在有序序列中的插入位置并插入,有序序列还是有序的,接下来重复上述步骤,直到无序序列全部插入有序序列 ,这是整个序列只剩下有序序列即有序了. 2.代码:    3.复杂度: 用二分插入排序所要进行的总比较次数为O(lgn),当n较大时,比直接插入排序的最大比较次数小得多,但大于最小比较

经典排序算法学习笔记3——插入排序

一.插入排序 工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间. 数据结构 数组 最差时间复杂度 O(n^2) 最优时间复杂度 O(n) 平均时间复杂度  O(n^2) 最差空间复杂度 总共 O(n) ,需要辅助空间O(1) https://zh.wikipedia.org/wiki/

我的Java开发学习之旅------&gt;Java经典排序算法之二分插入排序

一.折半插入排序(二分插入排序) 将直接插入排序中寻找A[i]的插入位置的方法改为采用折半比较,即可得到折半插入排序算法.在处理A[i]时,A[0]--A[i-1]已经按关键码值排好序.所谓折半比较,就是在插入A[i]时,取A[i-1/2]的关键码值与A[i]的关键码值进行比较,如果A[i]的关键码值小于A[i-1/2]的关键码值,则说明A[i]只能插入A[0]到A[i-1/2]之间,故可以在A[0]到A[i-1/2-1]之间继续使用折半比较:否则只能插入A[i-1/2]到A[i-1]之间,故可

JavaScript ,Python,Go,java,C#系列算法之【插入排序】篇

常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等.用一张图概括: 插入排序 插入排序(英语:Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间. 插入排序和冒泡排序一样,也有一种

Python之路,Day21 - 常用算法学习

Python之路,Day21 - 常用算法学习 本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出.如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题.不同的算法可能用不同的时间.空间或效率来完成同样的任务.一个算法的优劣可以用空间复杂度与时间复杂度来衡量. 一个算