Java - 常见的算法
二分法查找
- private static int binarySearch(int[] list,int target) {
- int low = ;
- int high = list.length - ;
- //直到low>high时还没找到关键字就结束查找,返回-1
- while(low<=high){
- int mid = (low+high) / ;
- if(target < list[mid]){
- high = mid - ;
- }
- else if(target > list[mid]){
- low = mid + ;
- }
- else if(target == list[mid]){
- return mid;
- }
- }
- return -;
- }
冒泡排序
- public static void bubbleSort(int[] arr) {
- /*
- * 外面的for循环决定一个长度为 n 的数据要比较多少轮才能完成排序。
- * 里面的for循环决定每次一轮循环中要做多少次才能结束。
- */
- for(int i = ; i < arr.length - ; i++) {
- for(int j = ; j < arr.length - - i; j++){
- //从小到大,大的值放后面位置。
- if (arr[j] > arr[j+]){
- int temp = arr[j]
- arr[j] = arr[j + ]
- arr [j + ] = temp
- }
- }
- }
- }
快速排序
基本思想是将要排序的数据分割成独立的两部分 ,其中一部分的所有数据都比另外一部分的所有数据都要小 ,然后在按照此方法对两部分数据分别进行快速排序 ,最终得到一个有序的序列。
- private static void quickSort(int[] a, int low, int high) {
- //找到递归算法的出口
- if( low > high) {
- return;
- }
- int i = low;
- int j = high;
- //默认 key
- int key = a[low];
- //开始一趟排序
- while( i < j) {
- //先从右往左找到第一个小于 key 的数 ,
- //这么做是因为在与 key 值交换的时候,保证了交换的数小于现有的 key 值
- //若是大于的话,j 指针就会继续向左移动 。
- while(i<j && a[j] > key){
- j--;
- }
- //从左往右找到第一个大于等于 key 的数
- while( i<j && a[i] <= key) {
- i++;
- }
- //交换,达到以 key “分治” 的效果
- if(i<j) {
- int temp = a[i];
- a[i] = a[j];
- a[j] = temp;
- }
- }
- // 当 i = j 时,调整 key 的值为 a[i] == a[j]
- int temp = a[i];
- a[i] = a[low];
- a[low] = temp;
- //对 key 左边的数快速排序
- quickSort(a, low, i- );
- //对 key 右边的数快速排序
- quickSort(a, i+, high);
- }
快速排序原理示例
- 假设要排的数组为:int[] a = { };
- 选择 key = , 开始时 i = ,j =
- 下标
- 开始
- i j
- 第一次找
- i j
- 交换:
- i j
- 第二次找
- i j
- 交换:
- i j
- 第三次找
- ij
- 调整key:
- ij
Java - 常见的算法的更多相关文章
- Java常见排序算法之归并排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- Java常见排序算法之Shell排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- Java常见排序算法之折半插入排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- Java常见排序算法之直接插入排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- Java常见排序算法之快速排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- Java常见排序算法之冒泡排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- Java常见排序算法之堆排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- Java常见排序算法之直接选择排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- 算法 | Java 常见排序算法(纯代码)
目录 汇总 1. 冒泡排序 2. 选择排序 3. 插入排序 4. 快速排序 5. 归并排序 6. 希尔排序 6.1 希尔-冒泡排序(慢) 6.2 希尔-插入排序(快) 7. 堆排序 8. 计数排序 9 ...
- java常见排序算法
今天去面试的时候又考了排序算法,排序这个东西,你以为你懂了,但是真正去写的时候才会发现好多细节自己都模棱两可,我写着写着就全都乱了,回来之后赶紧重新写一遍. (1)冒泡排序 public void b ...
随机推荐
- Office 365 邮件流
进入Exchange管理中心->点击左侧的“邮件流”->进入邮件流配置页面. 一.规则 规则也称传输规则,对通过组织传递的邮件,根据设定条件进行匹配,并对其进行操作.传输规则与众多电子邮件 ...
- Linux_列出文件和文件属性
ls +文件名:列出该文件 ls +目录名:列出该目录下的文件 ls 什么也不加:列出当前工作目录下的文件 ls -a 列出包括隐藏文件,即所有文件名 ls -l 列出文件名+详细信息 ls -al ...
- 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 ...
- Spring Boot中@Async的作用
在Spring中,@Async这个注解用于标记的异步的方法.方法上一旦标记了这个方法,当其它线程调用这个方法时,就会开启一个新的线程去异步处理业务逻辑. 此注解的使用说明: 1.此注解可以用在方法上, ...
- web接口测试中需要注意的点
1.接口返回 数据格式是否和预期一致.例如:要求返回json格式的数据,json数据的key命名是否正确,对应的value是否与数据库一致. 需要转换的数据是否正确转换,例如时间戳是否按正确转换为时间 ...
- Excel-DNA自定义函数的参数智能提示功能:ExcelDna.IntelliSense1.1.0.rar
解压缩后,可以看到如下3个文件. ExcelDna.IntelliSense.xll 以及 ExcelDna.IntelliSense64.xll 是两个函数参数智能提示加载项,分别用于32和64位E ...
- 区别 new function(){} 和 function(){}()
只要 new 表达式之后的 constructor 返回(return)一个引用对象(数组,对象,函数等),都将覆盖new创建的匿名对象,如果返回(return)一个原始类型(无 return 时其实 ...
- iOS动画效果集合、 通过摄像头获取心率、仿淘宝滑动样式、瀑布流、分类切换布局等源码
iOS精选源码 动画知识运用及常见动画效果收集 较为美观的多级展开列表 MUImageCache -简单轻量的图片缓存方案 iOS 瀑布流之栅格布局 一用就上瘾的JXCategoryView iOS ...
- highcharts 设置柱子之间的距离 柱子宽度
plotOption : { column : { // 设置每个柱自身的宽度 pointWidth : // x轴每个点只用一个柱,则这个属性设置的是相邻的两个点的柱之间的间距. // 如果x轴每个 ...
- C++ this指针详解(精辟)
this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员. 所谓当前对象,是指正在使用的对象.例如对于stu.show();,stu 就是当前 ...