vlambda博客
学习文章列表

冒泡、选择排序,与二分法查找 全网最详细!!!!!

话接上文,数组除了一维数组、二维数组,其实还有关于他们的算法

详解冒泡排序:

int[] arr1= {100, 4, 5, 12, 3};
int temp;

//冒泡排序,第一种格式

for(int i = 0; i <arr1.length; i++) {
for(int j = 0; j < arr1.length - i - 1; j++) {
if(arr1[j] > arr1[j+1]) {
temp = arr1[j];
arr1[j] = arr1[j+1];
arr1[j+1] = temp;
}
}
}

//冒泡排序,第二种格式
for(int i = arr1.length; i > 0; i--) {
for(int j = 0; j < i- 1; j++) {
if(arr1[j] > arr1[j+1]) {
temp = arr1[j];
arr1[j] = arr1[j+1];
arr1[j+1] = temp;
}
}

}

详解选择排序:

选择排序跟冒泡排序相比,执行效率高,每一次的排序都是由意义

循环一次,然后找出参加比较中这堆数据中最小的,拿着这个最小的值和前面的数据交换位置。

//选择排序,第一种格式
for(int i = 0; i < arr1.length - 1; i++) {
int min = i;
for(int j = i; j <arr1.length- i ;j++) {
//如果有比最小值还小的数字,把两者下标交换
if(arr1[j] < arr1[min]) {
min = j;
}
}

//如果min与i不相等,就把min与i交换。这时候的min就是内循环里面的j
if(min!=i) {
temp = arr1[min];
arr1[min] = arr1[i];
arr1[i] = temp;
}


}

详解二分法查找:

二分法查找的基本盘是建立再已经排序的情况下

二分法的查找效率是远远高于"一个挨着一个"这种查找效率

二分法的查找原理是什么:

假设有一个int类型的数组1(0下标) , 4 , 8 , 100 , 200(4下标)

目标,找出200的下标
(0+4) / 2 = 2 -->说明下标为2的是中间值

8 < 100 下标递增1 ——> 2+1 = 3

(3+4) / 2 = 3 -->说明下标为3的是中间值

100 < 200 下标递增1 ——> 3+1 = 4

(4+4) / 2 = 4 -->说明下标为4的是中间值

200 !<200 说明找到了目标数值

二分法的代码:

int begin = 0; //这个意思就是定义一个开始的值,可以通过方法传递实参进来赋值
int end = arr.length -1;//同上,为什么要减去1,因为下标是从0开始的

int mid;//定义一个中间的值

mid = (end + begin) / 2;//这就是中间的值的定义

while(begin<=end){

if(arr[mid] == dest){//如果中间的值等于目标值的话,返回中间值的下标;
return mid;
}
else if(arr[mid] < dest){
begin = mid + 1; //这个表示开始的值等于中间值加1,中间的值是需要发生变化的
}
else{
//目标如果在中间值的左边,需要修改中间值
//这个代表的情况是"arr[mid] > dest"
end = mid - 1;
}

}

sun公司写好的arrays包在java.util.arrays,里面有封装好的方法