hunkier

学习笔记,开源代码,技术分享

  • 主页
所有文章 友链 关于我

hunkier

学习笔记,开源代码,技术分享

  • 主页

快速排序

2019-11-26

快速排序的原理:选择一个关键值作为基准值。比较基准值小的都放在左边序列(一般是无序的), 比基准值大的都在右边(一般是无序的)。一般选择序列的第一个元素。

一次循环:从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果没有继续比较下一个,知道找到第一个比基准值小的值才交换。找到这个值之后,又从前往后开始比较,如果有比基准值大的,交换位置,如果没有继续比较下一个,直到找到第一个比基准值大的值才交换。直到从前往后的比较索引>从后往前比较的索引,结束第一次比较的索引,结束第一次循环,此时,对于基准值来说,左右两边就是有序的了。

public void sort(int[] a, int low, int high){
  int start = low;
  int end = high;
  int key = a[low];
  while(end>start){
    // 从后往前比较
    while(end>start && a[end]>=key){
      // 如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较
      end--;
      if(a[end]<=key){
        int tem = a[end];
        a[end] = a[start];
      }
      // 从前往后比较
      while(end>start && a[start]<=key){
        start++;
      }
      if(a[start]>=key){
        int temp = a[start];
        a[start] = a[end];
        a[end] = temp;
      }
      // 此时第一次循环比较结束,关键值的位置已经确定了。左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用
    }
    // 递归
    if(start>low){
      // 左边序列。第一个索引位置到关键值索引-1
      sort(a,low,start-1);
    }
    if(end<hight){
      // 右边序列。从关键值索引+1 到最后一个
      sort(a,end+1,high);
    }
  }
}
赏

谢谢你请我吃糖果

支付宝
微信
  • java
  • algorithm
  • quick sort
  • java
  • algorithm
  • quick sort

扫一扫,分享到微信

微信分享二维码
希尔排序
插入排序
目录,不存在的…
© 2020 hunkier
本站总访问量次 本站访客数人次
Hexo Theme Yilia by Litten
  • 所有文章
  • 友链
  • 关于我

tag:

  • github
  • blog
  • hexo
  • centos
  • sshd
  • DNS
  • centos firewall
  • go-fastdfs
  • mysql
  • chrome
  • redis
  • nginx
  • CentOS Linux Users
  • date
  • timezone
  • centos vnc
  • Linux
  • cockpit
  • kubernetes
  • docker
  • rancher
  • linux
  • 设计模式
  • 七大原则
  • shell
  • Mac osx
  • Hackintosh
  • Nvidia
  • jvm
  • lock
  • java
  • concurrent
  • object header
  • Synchronized
  • AbstractQueuedSynchronizer
  • volatile
  • atomic
  • CAS
  • LOCK
  • wechat
  • lock escalation
  • reactor
  • nio
  • netty
  • myql
  • master
  • slave
  • Percona XtraBackup
  • vim
  • vmware
  • algorithm
  • bucket sort
  • biSearch
  • merge sort
  • quick sort
  • insert sort
  • radix sort
  • shell sort
  • https
  • caddy
  • ios
  • Jailbreaking
  • kibana
  • htpasswd
  • auth
  • 正则
  • mycat
  • subtable
  • partbymonth
  • wget
  • CentOS
  • iptables
  • RabbitMq
  • PaddleOCR
  • Python

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

  • 1.博客
  • 2.码云
  • 3.github
  • 4.coding
  • 5.阿里云
  • 6.vultr
程序猿<br><br>就职于万众科技<br>Java后端开发<br>谢谢大家