zoukankan      html  css  js  c++  java
  • 快速排序

    快速排序介绍 

      快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

    快速排序示意图

    代码实现

    package sort;
    
    import java.util.Arrays;
    
    public class QuickSort {
        public static void main(String[] args) {
    //       int[] arr={-9,78,0,23,-567,70};
           int[] arr={-9,78,0,23,-567,70,-1,300,1234};
            quickSort(arr,0,arr.length-1);
            System.out.println(Arrays.toString(arr));
        }
        //快速排序
        public static void quickSort(int[] arr,int left,int right){
            int l=left;//左下标
            int r=right;//右下标
            int pivot=arr[(left+right)/2];//中轴值
            int temp=0;//临时变量
            /*
            * while循环的目的是让pivot值小的放在左边
            * 比pivot大的放在右边
            * */
            while (l<r){
                //在privot的左边一直找,找到大于等于pivot值,才退出
                while(arr[l]<pivot){
                    l+=1;
                }
                //在pivot的右边一直找,找到小于等于pivot的值,才退出
                while (arr[r]>pivot){
                    r-=1;
                }
                //如果l>=r说明pivot左右两边的值,已经按照左边小于等于pivot,右边大于等于pivot
                if(l>=r){
                    break;
                }
                //交换
                temp=arr[l];
                arr[l]=arr[r];
                arr[r]=temp;
                //如果交换完后,发现这个arr[r]==pivot,r--前移
                if(arr[l]==pivot){
                    r-=1;
                }
                //如果交换完后,发现这个arr[r]==pivot,l++后移
                if(arr[r]==pivot){
                    l+=1;
                }
            }
            //如果l==r,必须l++,r==,否则为出现栈溢出
            if(l==r){
                l+=1;
                r-=1;
                //向左递归
                if(left<r){
                    quickSort(arr, left, r);
                }
                //向右递归
                if(right>l){
                    quickSort(arr,l,right);
                }
            }
        }
    }

    运行结果

  • 相关阅读:
    10分钟轻松设置出 A+ 评分的 HTTP/2 网站
    GGSN与SGSN简介
    cocos游戏开发小白教程网站
    cocos2d-x JS 字符串
    cocos2d-x android工程接入第三方支付宝SDK
    pyCharm编辑器激活使用
    cocos2d-x C++ iOS工程集成第三方支付宝支付功能
    (已解决)在linux的虚拟机上安装vmware tools(实现windows与虚拟机之间的文件交互复制粘贴)
    虚拟机 liunx系统以 root 身份登录权限
    mac系统搭建SVN版本控制
  • 原文地址:https://www.cnblogs.com/ftx3q/p/15764149.html
Copyright © 2011-2022 走看看