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 ...
随机推荐
- (转)Navicat Premium 12.1.8.0安装与激活
http://www.mamicode.com/info-detail-2493067.html
- Linux基础篇六:Linux文件属性和类型
-:代表文件 s: sorket文件 b:block块设备 (磁盘,光驱等) c:字符设备 l:连接文件 p:管道文件 d:代表目录文件 为了更加区分- (文件的具体类型),系统提供了file命令更加 ...
- AdminWebSessionManager AdminAuthorizingRealm ShiroConfig ShiroExceptionHandler
package org.linlinjava.litemall.admin.shiro; import com.alibaba.druid.util.StringUtils; import org.a ...
- 电脑C盘空间不足
电脑C盘空间不足,又不知道哪些文件可以删,可以下载下面的批处理文件 @echo off echo 正在清除系统垃圾文件,请稍等...... del /f /s /q %systemdrive%\*.t ...
- mysql时区问题解决方案
#url添加参数serverTimezone=UTC 1.jdbc:mysql://127.0.0.1:3306/mymusic?useUnicode=true&characterEncodi ...
- [flask]Restful接口测试简单的应用
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : shenqiang from flask import Flask,make_res ...
- Windows下定时任务重启tomcat
1.创建bat文件 vaccinateOff.bat => taskkill /T /F /FI "WINDOWTITLE eq Tomcat-jx-1" 注:Tomcat ...
- 1005 继续(3n+1)猜想 (25 分)
题目:链接 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对 n=3 ...
- 整合SSM遇到的错误,数据库连接失败问题集合
Could not get JDBC Connection; nested exception is java.sql.SQLException: Connections could not be a ...
- php 依赖注入 和 控制反转 php设计模式
https://blog.csdn.net/zyddj123/article/details/82753650 什么是依赖注入?IOC:英文全称:Inversion of Control,中文名称:控 ...