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);
                }
            }
        }
    }

    运行结果

  • 相关阅读:
    MySQL "show users"
    MySQL
    A MySQL 'create table' syntax example
    MySQL backup
    MySQL show status
    Tomcat, pathinfo, and servlets
    Servlet forward example
    Servlet redirect example
    Java servlet example
    How to forward from one JSP to another JSP
  • 原文地址:https://www.cnblogs.com/ftx3q/p/15764149.html
Copyright © 2011-2022 走看看