美文网首页全栈工程师修炼程序员
快速排序(Java 版本 文字描述+排序过程的截图)

快速排序(Java 版本 文字描述+排序过程的截图)

作者: 平行线 | 来源:发表于2016-06-04 20:06 被阅读410次

1:概念

 快速排序也叫分治法,它和冒泡排序选择排序不同,每排一次并不是找出最大或者是最小的的数字而是选择一个数字把该数字的左边都比它小(大)并且右边都比它大(小)。

2:排序过程

如:12 342 1 56 8 789 3 5 999 33 88经过一次排序后12的左边都比12大,12的右边都比12小。如下图所示

12的左边都比12大,12的右边都比12小

这样无序的数字被分成了3块。12的左边和右边都还可以继续分块。接下来把88当作参考数把 88 342 33 56 999 789 划分成88的左边都比88大,88的右边都比88小.

88的左边都比88大,88的右边都比88小
 直到左右都不能划分的时候说明排序结束。附整体流程图
整体流程图

3:代码实现要点及程序运行过程截图

 1:一般会有两个参数一个表示数组的开始位置(startIndex),一个表示数组结束位置(endIndex)。
 2:循环结束判断依据为startIndex>=endIndex。
 3:使用一个标志记录排序后该数的位置,使用递归的方式调用排序方法实现快速排序。示例代码为:divideArr(toSort,startIndex,flag-1);divideArr(toSort,flag+1,endIndex);

程序运行过程截图:

程序运行过程截图

4:代码示例

public static void main(String[] args) {
        /**
         *快速排序(从小到大排序): 待排序
         */
        int[] toSort={12,342,1,56,8,789,3,5,999,33,88};
        
        System.out.print("未排序前结果:");
        printTosort(toSort);
        
        
        divideArr(toSort,0,toSort.length-1);

    }

    /**
     * 
     * @param toSort  :待排序的数组
     * @param startIndex :数组起始位置
     * @param endIndex:数组结束位置
     */
    private static void divideArr(int[] toSort,int startIndex,int endIndex){
        
        if(startIndex<endIndex){
            int l=startIndex;
            int r=endIndex;
            int flag=l;//flag:标志位。通过排序后标志位的左边都比它小右边都比它大。
            System.out.println();
            System.out.println("                标志位的值为:【"+toSort[flag]+"】");
            System.out.println();
            int tmp=0;//用来交换时临时存放数的变量。
            while (l<r){
                //从右边找比它小的数
                while(flag<r&&toSort[flag]>toSort[r]){
                    r--;
                }
                if(r>flag){
                    //表示右边存在比标志位还小的数。
                    //1:右边的数和标志位互换。
                    //2:标志位重新标志位右边的下标
                    tmp=toSort[r];
                    toSort[r]=toSort[flag];
                    toSort[flag]=tmp;
                    flag=r;
                }
                
                //从左开始边找比它大的数
                while(flag>l&&toSort[flag]<toSort[l]){
                    l++;
                }
                
                if(flag>l){
                    //说明左边出现比标志位还大的数。
                    //1:左边的数和标志位互换。
                    //2:标志位重新标志位左边的下标
                    tmp=toSort[l];
                    toSort[l]=toSort[flag];
                    toSort[flag]=tmp;
                    flag=l;
                }
            }
            System.out.print("排序后结果:");
            printTosort(toSort);
            
            divideArr(toSort,startIndex,flag-1);
            divideArr(toSort,flag+1,endIndex);
        }
        
    }
    
    
    private static void printTosort(int[] toSort) {
        for(int i=0;i<toSort.length;i++){
            System.out.print(toSort[i]+"   ");
        }
        System.out.println();
    }

希望对看到文章的小伙伴有所帮助。有描述不正确的地方望指正。

相关文章

  • 快速排序(Java 版本 文字描述+排序过程的截图)

    1:概念 2:排序过程 如:12 342 1 56 8 789 3 5 999 33 88经过一次排序后12的左边...

  • 冒泡排序(Java 版本 文字描述+排序过程的截图)

    1:概念 通过相邻两个数组进行比较把小的数后移(实现从大到小的排序)或者把大的数往后移(实现重小到大的排序)。 如...

  • 选择排序(Java 版本 文字描述+排序过程的截图)

    1:概念 循环待排序区间找到最大的数并且和待排序的区间中一个数字(实现从大到小排序)或者最后一个数字(实现从小...

  • java排序方法资料

    java排序,效率高的是哪种排序方法 JAVA快速排序(高效) java中常用的几种排序算法 相关代码: /* *...

  • 面试知识点

    排序冒泡排序快速排序选择排序插入排序二路归并 查找二分查找 排序和查找的java实现 java语言Java字符串字...

  • 数据结构&算法(一)

    一、Java实现快速排序算法 二、Java实现折半插入排序算法 三、Java实现冒泡排序算法

  • 多语言实现快速排序算法

    快速排序: 快速排序采用“分而治之、各个击破”的观念,此为原地(In-place)分割版本。 快速排序使用分治法(...

  • 常见排序的java实现

    常见排序的java实现 常见排序java实现 插入排序(二分插入排序) 希尔排序 快速排序(三数中值快排) 冒泡排...

  • 排序算法Java实现

    本文会通过Java语言实现:冒泡排序,插入排序,选择排序,归并排序,快速排序,桶排序,计数排序,基数排序,希尔排序...

  • Java基础01 冒泡排序

    冒泡排序 Java中有很多种排序:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、...

网友评论

本文标题:快速排序(Java 版本 文字描述+排序过程的截图)

本文链接:https://www.haomeiwen.com/subject/ymildttx.html