栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java关于快速排序的代码分析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java关于快速排序的代码分析

代码:
//begin为需要排序的起始位置,end为终止位置
	public void quickSort(double[] src, int begin, int end) {
		
		//一个数为有序,begin key) {
                    j--;
                }
                //将这个数挪右边
                if (i < j) {
                    src[i] = src[j];
                    i++;
                }
                //从i开始遍历,找到大于基准数的索引
                while (i < j && src[i] < key) {
                    i++;
                }
                //将数挪到左边
                if (i < j) {
                    src[j] = src[i];
                    j--;
                }
            }
            //
            src[i] = key;
            quickSort(src, begin, i - 1);
            quickSort(src, i + 1, end);
        }
    }
	
快速思想:

        选择一个基准数,将小于基准数的数挪到基准数的前面,大于基准数的数挪到基准数的后面。这样基准数的位置与已经排序后的位置相同。

        如图:

        

        然后将这两个无序区重复上述操作,直到无序区只有一个元素,就排序完成了。

 代码分析:

        1、因为需要重复操作,所以可以采用递归的方法实现。

        2、既然采用递归,则需要考虑递归函数的参数

                参数1:需要排序的数组 src

                参数2:数组中需要排序的段的起始位置 begin

                参数3:数组中需要飘絮的段的终止位置 end

        3、递归函数的终止条件

                上面提到只剩一个元素的段是有序的,所有只要 begin

        元素才进行排序。若只有一个元素递归就结束了。

        4、将基准数移动到两个无序段的中间

                方法是将基准数先保存下来,左右同时遍历。每次遍历时先找到右边第一个小于基准数的数,将它移动右边的空位(第一个空位是基准数的位置,因为它已经保存了),同时空出自身的位置,然后再找到右边第一个大于基准数的数,再移动到右边之前的空位,同时空出自己的位置。

        举个栗子:

        数组:5 9 4 6 1

        函数第一次执行时:i=0,j=4,基准数为5

        第一次循环

        右边第一个小于5的数:1

        移动到左边 数组为 1 9 4 6 1  此时i=1 j=4

        左边第一个小于5的数:9        

        移动到右边 数组为:1 9 4 6 9    此时i=1 j=3

        第二次循环

        右边第一个小于5的数:4

        移动到左边 数组为 1 4 4 6 9  此时i=2 j=2

        i=j第一次排序完毕

       将基准数插入到 i=2的位置 数组为:1 4 5 6 9

        

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/999087.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号