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

    快速排序介绍:

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

     

    代码:

    package com.gcy.sort;

    import java.util.Arrays;

    /**
    * 快速排序
    * @author Administrator
    *
    */
    public class QuickSort {

    public static void main(String[] args) {
    int [] arr= {-9,78,0,23,-567,70};
    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 povit=arr[(left+right)/2];//中轴值
    int temp=0;
    //while循环目的是让比povit小的值再左边,比povit大的值在右边
    while(l<r) {
    //在povit的左边一直找,直到找到比povit大的值就退出
    while(arr[l]<povit) {
    l+=1;
    }
    while(arr[r]>povit) {
    r-=1;
    }
    //如果l>=r说明povit左右两边的值, 已经按照左边全部是小于等于povit值的数,右边全是大于等于povit值的数
    if(l>=r) {
    break;
    }
    //交换
    temp=arr[l];
    arr[l]=arr[r];
    arr[r]=temp;

    //如果交换完毕后发现arr[l]==povit,r--
    if(arr[l]==povit) {
    r-=1;
    }
    //如果交换完毕后发现arr[r]==povit,l++
    if(arr[r]==povit) {
    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);
    }
    }

    }

    结果:

    有兴趣的小伙伴可以测试一下其排序速度,在数据足够多的情况下快速排序的速度是要快于插入排序的

  • 相关阅读:
    第11组 团队Git现场编程实战
    团队项目-需求分析报告
    团队项目-选题报告
    第二次结对编程作业
    第11组 团队展示
    第一次结对编程作业
    第一次个人编程作业
    第一次博客作业
    JavaScript学习笔记----Window对象
    自学前端开发:模拟Array功能 不是扩展子类
  • 原文地址:https://www.cnblogs.com/juddy/p/13771727.html
Copyright © 2011-2022 走看看