黑马程序员技术交流社区

标题: 插入排序学习,还有什么比较基本的排序方法? [打印本页]

作者: 马超(Andy)    时间: 2014-7-20 11:21
标题: 插入排序学习,还有什么比较基本的排序方法?
本帖最后由 马超(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;                        //当循环结束,意味着已经找到要插入的位置,利用中间值把要插入的值插入在此
        }

    }



作者: sugar    时间: 2014-7-21 08:54
这个图像太形象了
作者: 马超(Andy)    时间: 2014-7-21 08:59
sugar 发表于 2014-7-21 08:54
这个图像太形象了

:lol维基百科是万能滴
作者: 孙宏图    时间: 2014-7-21 09:34
快速,合并,冒泡,选择
作者: 王石    时间: 2014-7-22 20:10
太牛了弄得不错,受教了,又看来一边排序
作者: springing    时间: 2014-7-23 06:33
你的GIF无敌了
作者: springing    时间: 2014-7-23 06:35
感谢分享!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2