JAVA算法起步之快速排序实例

 更新时间:2014年02月10日 15:13:17   作者:  
这篇文章主要介绍了JAVA算法起步之快速排序实例,需要的朋友可以参考下

快速排序一听这个名字可能感觉很快,但是他的算法时间复杂度最坏情况却跟插入排序是一样的。之所以成为快速排序是因为他的平均效率比堆排序还要快,快速排序也是基于分治思想与归并排序差不多,但是快速排序是原址的,直接在原数组操作不需要再开辟新的存储空间。快速排序的思想很简单,就是选定一个关键字k将原数组分成两份g1与g2,g1中所有的元素都比k小或者相等,而g2中所有的数据都比k大或者等于,这样对g1与g2分别进行快速排序,最终我们得到的就是一个有序的数组。代码中的sort方法就是对刚才语句的描述。而关键的算法就是去寻找k的位置将原数组分为大小两部分的过程。方法getPlocation就是快速排序的核心。他的实现原理有点像插入排序只是有点像。每次都把map中end位置的元素作为关键字,通过与end元素对比将数组分成大小两部分,而i与j则是两个分割线,i与j之间的数都是比core大的元素,i与j就像一条贪吃蛇,当j的下一个数比core大的时候j+1,i到j的长度增大了,而如果比core小的话,i与j都向前走一下,并将那个小数放在i的前面。这样循环一遍后,start到end-1之间就是按大小分开的,最后将core放在中间,将core的位置返回就是分界线了。

复制代码 代码如下:

public class QuickSort {
 public int getPlocation(int[] map,int start,int end){
  int core=map[end];
  int i=start-1;
  for(int j=start;j<=end-1;j++){
   if(map[j]<=core){
    i++;
    int cache=map[j];
    map[j]=map[i];
    map[i]=cache;
   }
  }
  i++;
  map[end]=map[i];
  map[i]=core;
  return i;
 }
 public void sort(int[] map,int start,int end){
  if(start<end){
  int p=getPlocation(map, start, end);
  sort(map, start, p-1);
  sort(map,p+1,end);
  }
 }
 public static void main(String[] args) {
  int[] map=new int[]{4,1,5,3,7,12,65,7};
  QuickSort qs=new QuickSort();
  qs.sort(map, 0, map.length-1);
  for (int i = 0; i < map.length; i++) {
   System.out.println(map[i]);
  }
 }
}

相关文章

  • 解决IDEA克隆代码后在右下角没有git分支的问题

    解决IDEA克隆代码后在右下角没有git分支的问题

    这篇文章主要介绍了解决IDEA克隆代码后在右下角没有git分支的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • springboot整合redis集群过程解析

    springboot整合redis集群过程解析

    这篇文章主要介绍了springboot整合redis集群过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • java中使用logger打印日志有哪些坑

    java中使用logger打印日志有哪些坑

    在Java中使用日志记录器(Logger)打印日志时,确实存在一些常见的坑需要注意,本文就来介绍一下几种方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • spring boot实现自动输出word文档功能的实例代码

    spring boot实现自动输出word文档功能的实例代码

    这篇文章主要介绍了spring boot实现自动输出word文档功能的实例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • SpringBoot使用自动配置xxxAutoConfiguration

    SpringBoot使用自动配置xxxAutoConfiguration

    这篇文章介绍了SpringBoot自动配置xxxAutoConfiguration的使用方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • java 中RandomAccess接口源码分析

    java 中RandomAccess接口源码分析

    这篇文章主要介绍了java 中RandomAccess接口源码分析的相关资料,需要的朋友可以参考下
    2017-05-05
  • Java Web三层架构的配置详解

    Java Web三层架构的配置详解

    这篇文章主要介绍了Java Web三层架构的配置方法,需要的朋友可以参考下
    2014-10-10
  • JavaWeb中过滤器Filter的用法详解

    JavaWeb中过滤器Filter的用法详解

    过滤器通常对一些web资源进行拦截,做完一些处理器再交给下一个过滤器处理,直到所有的过滤器处理器,再调用servlet实例的service方法进行处理。本文将通过示例为大家讲解JavaWeb中过滤器Filter的用法与实现,需要的可以参考一下
    2022-08-08
  • 初学者Android studio安装图文详解

    初学者Android studio安装图文详解

    本文给大家分享android studio 安装图文详解包括下载安装及遇到的问题,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-09-09
  • Nacos后台频繁打印get changedGroupKeys:[]的问题及解决

    Nacos后台频繁打印get changedGroupKeys:[]的问题及解决

    这篇文章主要介绍了Nacos后台频繁打印get changedGroupKeys:[]的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01

最新评论