二分法查找

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 - 常见的算法的更多相关文章

  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. auctex 11.86的墓志铭

    卸载了emacs23,在Ubuntu 软件中心搜索并安装了emacs24.3.把auctex11.86也卸载了(自然,在.emacs文件里也注释掉了它的加载路径,但是我不会删去那段代码的.让注释的那段 ...

  2. vue项目post、put、delete、get向java后端传数组

    通常我们向后端发送数据有两种方式 get.post,后又restful风格出现,又有put.delete等传参方式.但是对于我们来说他们的传参本质还是只有get和post的两种,即 get.delet ...

  3. 4418开发板Android源码整体&单独编译

    内核缺省文件配置之后,Android 目录,运行一键编译脚本“build_android.sh”,如下图所示.注意:本篇文章基于iTOP-4418开发板,编译 Android 必须保证给 Ubuntu ...

  4. Linux_切换,创建,和删除目录

    切换目录 cd /tmp cd ..切换到上一个目录 cd ~  进入当前用户的家目录 cd ~nbzyh  进入zyh用户 创建目录 当当前在tmp中时:mkdir /tmp/sam 这里用的是绝对 ...

  5. 17)C++开始--命名空间

    命名空间:就是区分同一个名字,在不同的作用域的变量 代码展示 #include<iostream> namespace spaceA{ ; namespace spaceB{ struct ...

  6. logService

    vpackage org.linlinjava.litemall.admin.service; import org.apache.shiro.SecurityUtils; import org.ap ...

  7. 修改mysql密码报错: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '

    使用这种格式报错: 格式:mysql> set password for 用户名@localhost = password('新密码'); 找到另一种方法解决: ALTER USER 'root ...

  8. 收集到的技术相关网址——delphi

    1.DLL封装登录框架实现代码复用 https://www.cnblogs.com/wenwencao/articles/1333659.html

  9. [LC] 226. Invert Binary Tree

    Invert a binary tree. Example: Input: 4 / \ 2 7 / \ / \ 1 3 6 9 Output: 4 / \ 7 2 / \ / \ 9 6 3 1 /* ...

  10. CSS预处理技术

    CSS自定义变量 这是一个实验中的标准,后续的具体写法和解析可能会有变动. 与Less|Sass等预处理器不同的是CSS变量带有语义效果,并且不需要额外的编译.因为其名称本身就包含了语义的信息,这使得 ...