基础算法-冒泡排序与二分查找(JAVA实现)
Posted curry-rice
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础算法-冒泡排序与二分查找(JAVA实现)相关的知识,希望对你有一定的参考价值。
基础算法:
冒泡排序
冒泡排序:将无序的数据有序化,
将相邻的两个元素进行比较, 使最大值或者最小值一步步冒上去,所以称为冒泡排序.
冒泡排序思想:
以升序为例:
在一个数组中,将相邻的两个元素A与B进行比较,如果A大于B 则A与B交换位置,若小于B则不进行操作, 变量交换通过中间变量来进行.
代码示例:
public static void main(String[] args) {
int[] a = {3, 1, 6, 5, 2, 9, 7, 8};
int temp = 0;
for(int i=a.length-1;i>0;i--){
for(int j=0;j<i;j++){
if(a[j]>a[j+1]){
temp = a[j+1];
a[j+1]= a[j];
a[j] = temp;
}
}
}
打印结果为:12356789
加上思路便于理解:
i=数组长度-1 是为了进行循环次数通过j+1的方法 如果不进行长度-1的话,会造成数组下标越界的错误.
执行过程:当3>1时,向前移动,3与6相比,6大,所以6不动, 6>5 6向前移动. 由于6>5>3, 然后3>1 ,那么6一定>1, 此时6肯定是最大的, 而5与前边的大小没有直接关系, 所以无法进行大小数值确定, 需要重新比较,数组对于我们来说相对有序,但是对于冒泡算法的程序来说,与无序没有区别.
重复操作之后, 9会在最后一位, 而我们的第一层循环也已经执行完毕. 第二次时,再进行一次循环, 重复操作到最后,只需要一次比较就是第一位和第二位的比较,
上边就是冒泡排序的原理与思想.
二分查找
当我们查找一个有序的线性表的时候,再通过遍历进行全表搜索,会进行大量的资源浪费,可以使用二分查找的思想进行查找.
使用二分查找的限制:
1.线性表
2.有序
二分查找的思路:
每一次与数组的中间值进行对比, 判断前后顺序,再进行对比, 如此反复,直到找到需要的变量.
话不多说 直接上代码 用代码进行解析:
/**
*二分查找
* @param array 传递进来的数组
* @param des 要查找的值
* @return
*/
public static int binarySearch(int[] array,int des){
int low = 0;//设置数组下标最小值
int max = array.length-1;//数组下标最大值
while(low<=max){
int mid = (max+low)>>>1 ;//找到数组中间值.
if(array[mid]==des){
//当中间值正好为想要查找的数值时,直接返回数组下标
return mid;
}else if(array[mid]>des){
//中间值大 所以锁定区域在前面,重新设定范围
max = mid-1;
}else {
//中间值小 所以锁定区域在后面,重新设定范围
low = mid+1;
}
}
//未发现此值时 返回-1
return -1;
}
递归实现:
public static int recursionBinarySearch(int[] array,int des,int low, int max){
int mid = (low+max)>>>1;
if(array[mid]==des){
//当中间值正好为想要查找的数值时,直接返回数组下标
return mid;
}
if(low>=max){
return -1;
}
else if(array[mid]>des){
//中间值大 所以锁定区域在前面,重新设定范围
max = mid-1;
return recursionBinarySearch(array,des,low,max);//将值设定后传入下一层,层层调用 直到相等.
}else if(array[mid]<des) {
//中间值小 所以锁定区域在后面,重新设定范围
low = mid+1;
return recursionBinarySearch(array,des,low,max);//将值设定后传入下一层,层层调用 直到相等.
}
return -1;
}
以上是关于基础算法-冒泡排序与二分查找(JAVA实现)的主要内容,如果未能解决你的问题,请参考以下文章
Java八股文面试题 基础篇 -- 二分查找算法冒泡排序选择排序插入排序希尔排序快速排序