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 ...
随机推荐
- 基于Wiki的知识共享平台模型架构
一.引言 当今的全球化知识经济社会中呈现出信息泛滥和知识更新周期短的现象,知识管理逐渐成为现代企业管理中不容忽视的一环.虚拟企业是基于共识目标而组成的动态协作组织,成员参与的流动性与各成员之间地域分布 ...
- 2019-2020-1 20199324《Linux内核原理与分析》第四周作业
第三章 MenuOs的构造 一.知识点总结 计算机的三大法宝: 存储程序计算机 函数调用堆栈 中断 操作系统的两把宝剑: 中断上下文的切换(保存现场和恢复现场) 进程上下文的切换 它们都和汇编语言有着 ...
- python,winreg,获取当前系统的桌面绝对路径
import winreg import os def main(): new_path = os.path.join(desktop_path(), 'aaa.xlsx') # 结果为:C:\\Us ...
- mui 左侧选项卡-div模式 的选项卡切换监听
使用$('#segmentedControls').on('change', '.mui-control-item', function () { })和 document.getElementByI ...
- Spring Cloud服务消费者(rest+ribbon)
在上一篇文章,讲了服务的注册和发现.在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式,一种是ribbon+r ...
- Java类的三大特征
1.三大特征是封装.继承和多态 2.封装 特点: 需要修改属性的访问控制符为private: 创建getter/setter方法用于属性的读写: 在getter/setter方法中加入属性控制语句,用 ...
- layui表格自动对齐
正常情况table应该是这样展示的 但是却展示成了这样 格子没对齐,找了半天原因发现是在table.render中的cols参数多了一个"," 不细心一点真看不出来 正常结构应是 ...
- JQuery实现复制数据到剪贴板之各种麻花与右键点击弹出选择菜单
1.如果小伙伴们只是想实现点击某个按钮(通过click事件)实现复制功能. 那小哥哥我在这里推荐大家使用2个非常好用的插件 (1)clipboard.js:纯js插件,无需flash,相对来说更轻量级 ...
- python语法基础-函数-内置函数和匿名函数-长期维护
################## 内置函数 ####################### """ 一共是 68个内置函数: 反射相关的内置函 ...
- Qt static关键字全局变量
创建全局变量.h文件 globalvariable.h #ifndef GLOBALVARIABLE_H #define GLOBALVARIABLE_H #include <QImage> ...