2.4 快速排序

递归算法:递归就是指方法中调用方法本身的现象。
递归注意事项:递归一定要有出口,否则会有栈内存溢出。出口就是要有停止递归的时候。
递归的两个核心

  • 1.找出口
  • 2.找规律
    方法内部再次调用方法的时候,内部方法的参数要比外部参数的更接近出口。
    实例:通过递归方法求阶乘
public static int getFactorial(int number){if(number==1){  // 递归 出口return 1;}return number * getFactorial(number-1);  //内部的递归参数比外部的更接近出口。
}

递归遍历算法:
递归遍历算法描述:
将数组的第一个值作为 一个基准值,分别从前和后两个方向向中间进行遍历,先从end方向开始向前遍历,当遇到比base值小于等于的数据时,就停止进行遍历。然后start方向开始向后遍历,遇到比BaseNumber大的值就停止进行遍历,然后交换start和end对应的值,直到start和end相等时,将start对应的值与baseNumber进行互换。如此我们可以得到一个数组的两边,前端的数据都是比baseNumber小的值,而后端的数据都是比baseNumber大的值。如此就将前后两段的数据再用同等方法进行递归遍历。

public static void main(String[] args) throws ParseException {// 递归,找出数组中最先存在的
int[] arr = {7,1,4,6,5,8,3,12,8,9,21,4,0,5};
//        int[] arr = {7,5};
recursionSort(arr,0,arr.length-1);
}public static void recursionSort(int[] arr, int start, int end){System.out.println("开始的start和end"+start+" "+ end);
int i =start, j = end;  //将start和end的值保存下来,后面递归调用的时候需要。
if(start>=end){  //如果start的值大于等于end,则直接返回。return;
}
int baseNumber = arr[start];  // 将start的值赋值给baseNumber作为基准值。
while(start != end){while(true) {if(start==end || arr[end]<=baseNumber){  // 如果start==end,或者end对应的值小于等于baseNumber,则停止遍历break;}else{end--; // 如果遇到的值比baseNumber大,则继续向前遍历。}}while(true){if(start ==end || arr[start]>baseNumber){ // 如果start==end,或者start对应的值大于baseNumber,则停止遍历。break;}else{start++; //如果start对应的值比baseNumber小,则继续向前遍历。}}// 当start和end指针都停止的时候,那么久将start和end对应的值进行互换。int temp = arr[end];arr[end] = arr[start];arr[start] = temp;
}
// 当start和end相等的时候,则将start与end对应的值与baseNumber进行互换。
int temp = arr[end];
arr[end] = arr[i];
arr[i] = temp;
// 分前后两段分别递归遍历前后的数组。
recursionSort(arr,i,start-1);
recursionSort(arr,end+1,j);
}
// 定义一个函数,用来输出显示数组信息。
public static void printArr(int[] arr){for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+ " ");
}
System.out.println("");
}

Java 快速排序,递归排序算法相关推荐

  1. android studio插入数据表中没有_学Java能拿高薪吗 Java中常见排序算法有哪些

    学Java能拿高薪吗?Java中常见排序算法有哪些?作为老牌编程语言,Java拥有广阔的市场占有率,几乎90%以上的大中型互联网应用系统在服务端开发都会首选Java.为了加入到Java这一高薪行业,很 ...

  2. Java回炉之排序算法

    Java回炉之排序算法 Java回炉之排序算法 冒泡排序 插入排序 归并排序 快速排序 希尔排序 选择排序 堆排序 冒泡排序 一次次遍历数组,每次比较相邻两个. 两重循环,内层比较index和inde ...

  3. Java折半二叉树,成都汇智动力-Java实现常用排序算法

    原标题:成都汇智动力-Java实现常用排序算法 排序算法介绍 1. 基本概念 稳定性: 待排序的数列中,若两个元素的值相等 R1 = R2 ,在排序结束之后,元素之间的相对位置没有发生变化,则称排序算 ...

  4. Java八大内部排序算法

    排序算法的分类 时间复杂度以及空间复杂度 注:为了进行一定的比较,此处不按照上面的顺序. 直接插入排序 基本思想 在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使 ...

  5. java 快速排序 递归_Java递归快速入门

    java 快速排序 递归 The function calls itself until someone stops it. 该函数将自行调用,直到有人停止它为止. Recursion can fee ...

  6. Java默认的排序算法

    Java基础-08 [08:11] Java默认的排序算法: 需要区分: 是 Arrays.sort() 还是 Collections.sort() (底层是调用 Arrays.sort()): 什么 ...

  7. 【黑马程序员】 学习笔记 - Java数组及排序算法

    ----------------------android培训.java培训.期待与您交流!---------------------- JAVA数组及排序算法 一  数组 1.定义 定义:有联系的一 ...

  8. Java 实现常见排序算法

    Java 实现常见排序算法 1. 综述 复习常见排序算法,用Java实现. 2. 代码 1 package cn.edu.tju.scs; 2 3 public class Sort { 4 publ ...

  9. Java排序算快速排序_Java排序算法 [快速排序]

    package cn.com.dom4j.sort; public class QuickSort { /** 快速排序 在 Java中, 快速排序被用作基本数据类型的排序 (当然, 不只快速排序一种 ...

最新文章

  1. 使用 TiKV 构建分布式类 Redis 服务
  2. Java中创建对象的5种方式 -[转] http://www.codeceo.com/article/5-ways-java-create-object.html...
  3. 五种最易被老板开除的人
  4. 【网易严选】iOS持续集成打包(Jenkins+fastlane+nginx)
  5. 看了这个高并发系统架构,才知道我对秒杀的误解有多深
  6. set_error_handler自定义错误处理
  7. Zookeeper 辅助 API
  8. 深度佳能MP4视频恢复软件 v8.1.0
  9. php页面价格排序代码,php 数组动态添加实现代码(最土团购系统的价格排序)
  10. 如何查看selenium的版本号
  11. Kaldi的英文缩写
  12. 【OpenCV笔记一】Mac安装OpenCV环境及demo
  13. 以盛唐气象,浇胸中块垒:熊逸《唐诗50讲》学习笔记汇总
  14. DataTable.select()
  15. Oracle 11gR2 中 示例用户 安装说明
  16. VS2008 母版页嵌套母版页,下级母版页不执行Page_Load解决方法
  17. setStyle 方法封装
  18. 抖音上很火的时钟效果
  19. 苹果电脑开机慢怎么办
  20. oracle tlv,OSPF GR(Graceful Restart,平滑重启)技术

热门文章

  1. 招聘渠道超全汇总,最适合你的是哪一类?
  2. 为什么有机棉这么贵,还深受欢迎?
  3. 数据结构(C语言)-串子系统(实验)
  4. part1:企业微信发送消息API调试
  5. 卫青和霍去病:汉匈战争史最天才的两名战将
  6. Ubuntu如何发音
  7. 双矩阵对策MATLAB,带有模糊收益的双矩阵对策研究
  8. OpenGauss线程管理-系统日志线程-syslogger
  9. “快用助手”动起苹果商店奶酪
  10. Ubuntu重启黑屏无法进入GUI桌面