前面的学习过程中学习了数组的冒泡排序和二分查找,那么现在将它整理出来,go!
冒泡排序
冒泡排序的思想是按照一定顺序如(左到右,下到上)所有相邻两个数依次比较,第一轮比较完成后,选出第一轮比较的最大值或最小值,然后排除这一轮的最大值或最小值,在进行第二次比较,依次下去,直到只有一个数,无法比较,冒泡排序完成。
如在一个数组中int[] intArray= {5,1,9,7};我们选择最大,升序。
第一次比较:
5和1比 5大 交换 1 5 9 7
5和9比 9大 不交换 1597
9和7比 9大 交换 1579
剔除这一轮确定最大值9
第二轮比较
1和5比 5大 不交换 1579
5和7比 7大 不交换 1579
剔除这一轮确定最大值7
第三轮比较
1和5比 5大 不交换 1579
剔除这一轮确定最大值5
只剩下1 不需要再比较
当数组中存在n个数需要两两比较时,我们可以知道需要比较n-1轮,如上面这个例子4个数,只需要比较三轮;每比较完成一轮后便可剔除一个数,所以第一轮比较不剔除数,第二轮比较剔除第一轮比较得到的一个最大值,假设轮数i=0开始,每轮比较的次数就为n-1-i;
//冒泡排序
int[] intArray= {5,1,9,7};
for(int i=0;i<intArray.length-1;i++) { //n-1次比较 intArray.length就是n
for(int j=0;j<intArray.length-i-1;j++) {
if(intArray[j]>intArray[j+1]) { //相邻两个数依次比较
int t=intArray[j];
intArray[j]=intArray[j+1];
intArray[j+1]=t;
}
}
}
for(int i=0;i<intArray.length;i++) { //顺序打印
System.out.println(intArray[i]);
}
二分查找
二分查找的前提 :数据有序。
二分查找思想:所谓二分查找,其实就是获取一组有序数据的中间数据,判断其跟查询关键字的大小,如果中间数据大于关键字,则去中间数据前半段去寻找,(如果中间数据小于关键字,则取则去中间数据后半段去寻找)重新定义寻找区间以及中间数据,继续重复以上的操作,直到最后查询区间不存在或者查询到关键字的下标。
public static int halfSelect(int[] array, int k) {
if (array == null) { // 判断传入数组是否为空
return -1; //
}
if (k > array[array.length - 1] || k < array[0]) { // 判断输入k是否大于数组最大值或小于数组最小值
return -1;
}
int min = 0;
int max = array.length - 1;
int middle = (max + min) / 2; // 取中间值
while (k != array[middle]) { // 重新定义middle// 如果k值不等于中间值,执行while里面语句
middle = (min + max) / 2;
if (k < array[middle]) { // k小于中间值,max变化
max = middle - 1;
} else if (k > array[middle]) { // k大于中间值,min变化
min = middle + 1;
} else {
return array[middle]; // k=array[middle] 返回array[middle]
}
}
return -1; // 查找不到返回 -1
}
}