二分法查找

  1. private static int binarySearch(int[] list,int target) {
  2. int low = ;
  3. int high = list.length - ;
  4. //直到low>high时还没找到关键字就结束查找,返回-1
  5. while(low<=high){
  6. int mid = (low+high) / ;
  7. if(target < list[mid]){
  8. high = mid - ;
  9. }
  10. else if(target > list[mid]){
  11. low = mid + ;
  12. }
  13. else if(target == list[mid]){
  14. return mid;
  15. }
  16. }
  17. return -;
  18. }

冒泡排序

  1. public static void bubbleSort(int[] arr) {
  2. /*
  3. * 外面的for循环决定一个长度为 n 的数据要比较多少轮才能完成排序。
  4. * 里面的for循环决定每次一轮循环中要做多少次才能结束。
  5. */
  6. for(int i = ; i < arr.length - ; i++) {
  7. for(int j = ; j < arr.length - - i; j++){
  8. //从小到大,大的值放后面位置。
  9. if (arr[j] > arr[j+]){
  10. int temp = arr[j]
  11. arr[j] = arr[j + ]
  12. arr [j + ] = temp
  13. }
  14. }
  15. }
  16. }

快速排序

基本思想是将要排序的数据分割成独立的两部分 ,其中一部分的所有数据都比另外一部分的所有数据都要小 ,然后在按照此方法对两部分数据分别进行快速排序 ,最终得到一个有序的序列。

  1. private static void quickSort(int[] a, int low, int high) {
  2. //找到递归算法的出口
  3. if( low > high) {
  4. return;
  5. }
  6. int i = low;
  7. int j = high;
  8. //默认 key
  9. int key = a[low];
  10. //开始一趟排序
  11. while( i < j) {
  12. //先从右往左找到第一个小于 key 的数 ,
  13. //这么做是因为在与 key 值交换的时候,保证了交换的数小于现有的 key 值
  14. //若是大于的话,j 指针就会继续向左移动 。
  15. while(i<j && a[j] > key){
  16. j--;
  17. }
  18. //从左往右找到第一个大于等于 key 的数
  19. while( i<j && a[i] <= key) {
  20. i++;
  21. }
  22. //交换,达到以 key “分治” 的效果
  23. if(i<j) {
  24. int temp = a[i];
  25. a[i] = a[j];
  26. a[j] = temp;
  27. }
  28. }
  29. // 当 i = j 时,调整 key 的值为 a[i] == a[j]
  30. int temp = a[i];
  31. a[i] = a[low];
  32. a[low] = temp;
  33. //对 key 左边的数快速排序
  34. quickSort(a, low, i- );
  35. //对 key 右边的数快速排序
  36. quickSort(a, i+, high);
  37. }

快速排序原理示例

  1. 假设要排的数组为:int[] a = { };
  2.  
  3. 选择 key = 开始时 i = j =
  4.  
  5. 下标
  6.  
  7. 开始
  8. i j
  9.  
  10. 第一次找
  11. i j
  12.  
  13. 交换:
  14. i j
  15.  
  16. 第二次找
  17. i j
  18.  
  19. 交换:
  20. i j
  21.  
  22. 第三次找
  23. ij
  24.  
  25. 调整key
  26. ij

Java - 常见的算法的更多相关文章

  1. Java常见排序算法之归并排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  2. Java常见排序算法之Shell排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  3. Java常见排序算法之折半插入排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  4. Java常见排序算法之直接插入排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  5. Java常见排序算法之快速排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  6. Java常见排序算法之冒泡排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  7. Java常见排序算法之堆排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  8. Java常见排序算法之直接选择排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  9. 算法 | Java 常见排序算法(纯代码)

    目录 汇总 1. 冒泡排序 2. 选择排序 3. 插入排序 4. 快速排序 5. 归并排序 6. 希尔排序 6.1 希尔-冒泡排序(慢) 6.2 希尔-插入排序(快) 7. 堆排序 8. 计数排序 9 ...

  10. java常见排序算法

    今天去面试的时候又考了排序算法,排序这个东西,你以为你懂了,但是真正去写的时候才会发现好多细节自己都模棱两可,我写着写着就全都乱了,回来之后赶紧重新写一遍. (1)冒泡排序 public void b ...

随机推荐

  1. Office 365 邮件流

    进入Exchange管理中心->点击左侧的“邮件流”->进入邮件流配置页面. 一.规则 规则也称传输规则,对通过组织传递的邮件,根据设定条件进行匹配,并对其进行操作.传输规则与众多电子邮件 ...

  2. Linux_列出文件和文件属性

    ls +文件名:列出该文件 ls +目录名:列出该目录下的文件 ls 什么也不加:列出当前工作目录下的文件 ls -a  列出包括隐藏文件,即所有文件名 ls -l 列出文件名+详细信息 ls -al ...

  3. PAT甲级——1036 Boys vs Girls

    1036 Boys vs Girls This time you are asked to tell the difference between the lowest grade of all th ...

  4. Spring Boot中@Async的作用

    在Spring中,@Async这个注解用于标记的异步的方法.方法上一旦标记了这个方法,当其它线程调用这个方法时,就会开启一个新的线程去异步处理业务逻辑. 此注解的使用说明: 1.此注解可以用在方法上, ...

  5. web接口测试中需要注意的点

    1.接口返回 数据格式是否和预期一致.例如:要求返回json格式的数据,json数据的key命名是否正确,对应的value是否与数据库一致. 需要转换的数据是否正确转换,例如时间戳是否按正确转换为时间 ...

  6. Excel-DNA自定义函数的参数智能提示功能:ExcelDna.IntelliSense1.1.0.rar

    解压缩后,可以看到如下3个文件. ExcelDna.IntelliSense.xll 以及 ExcelDna.IntelliSense64.xll 是两个函数参数智能提示加载项,分别用于32和64位E ...

  7. 区别 new function(){} 和 function(){}()

    只要 new 表达式之后的 constructor 返回(return)一个引用对象(数组,对象,函数等),都将覆盖new创建的匿名对象,如果返回(return)一个原始类型(无 return 时其实 ...

  8. iOS动画效果集合、 通过摄像头获取心率、仿淘宝滑动样式、瀑布流、分类切换布局等源码

    iOS精选源码 动画知识运用及常见动画效果收集 较为美观的多级展开列表 MUImageCache -简单轻量的图片缓存方案 iOS 瀑布流之栅格布局 一用就上瘾的JXCategoryView iOS ...

  9. highcharts 设置柱子之间的距离 柱子宽度

    plotOption : { column : { // 设置每个柱自身的宽度 pointWidth : // x轴每个点只用一个柱,则这个属性设置的是相邻的两个点的柱之间的间距. // 如果x轴每个 ...

  10. C++ this指针详解(精辟)

    this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员. 所谓当前对象,是指正在使用的对象.例如对于stu.show();,stu 就是当前 ...