A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 马超(Andy) 于 2014-7-26 17:33 编辑

面向过程方面个人觉得排序这部分有必要多看看,练习完视频内演示的两种排序方法又学习了下 直接插入排序   还有其他什么基础排序 大家补充下

学习第三种排序算法--- 直接插入排序    假设要求让无序数组进行升序排列
分析:
     1.取无序数组中的第一个元素,并把此元素当做有序数组。
     2.取第二个元素,与第一个元素进行比较,若第二个元素比第一个元素大则不动,若二个元素比第一个元素小则把第一个元素移到第二个元素位置,第二个元素插入到第一个元素位置。(注意,这里是插入,并不是交换位置。)
     3.再取第三个元素,与其前一个元素(第二个元素)进行比较,若小于第二个元素,则再让第三个元素与第一个元素进行比较,若大于或者等于第一个元素,则把此元素插入到第一个元素后,同时把第三个元素向后移动。
     4.以此类推,轮到每个元素进行排序时,都要让它与其前边的第一个元素向前依次进行比较,直到第一个元素或者找到一个元素小于或等于其本身,然后把此元素插入到那个元素后边,其他元素依次向后移动。
     5.如此反复,直到最后一个元素插入完成则完成数组的排序。
附图:


java代码实现如下:    假设要求升序排列
//定义一个插入排序方法
    public static void insertSort(int[] arr)
    {
        int temp = 0;                                //定义一个变量,用来存储交换过程要交换的值
        int pos = 0;                                //定义一个变量,充当数组内指针,用来确定要比较的元素

        for (int i = 1; i < arr.length; i++)        //确定要进行插入排序的元素,因为第一个元素可以看做为有序,故从第二个元素开始排序
        {
            temp = arr;                            //先取出要进行插入排序的元素值,等待做比较以及插入处理
            
            pos = i;                                //取要比较元素的位置(下标)作为比较的起始点。
            while (pos > 0 && temp < arr[pos-1])//设置循环结束点,当被比较元素下标小于0或者要进行插入的元素大于或等于时停止其前边的一个元素时停止
            {
                arr[pos] = arr[pos-1];                //若以上条件结束,则其前边的元素以此向前位移
                pos--;                                //通过改变指针值,来改变要比较的数组元素
            }

            arr[pos] = temp;                        //当循环结束,意味着已经找到要插入的位置,利用中间值把要插入的值插入在此
        }

    }


6 个回复

正序浏览
感谢分享!
回复 使用道具 举报
你的GIF无敌了
回复 使用道具 举报
太牛了弄得不错,受教了,又看来一边排序
回复 使用道具 举报
快速,合并,冒泡,选择
回复 使用道具 举报
sugar 发表于 2014-7-21 08:54
这个图像太形象了

:lol维基百科是万能滴
回复 使用道具 举报
这个图像太形象了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马