本章内容(一个类的代码,上下能看懂)冒泡排序的概念和实现与优化,二分法的概念和实现:
排序:冒泡排序:数据之间两两比较,大的放后面,直到比较出最大的那个出来,然后继续循环比较。
* 优化:有时会出现已经排序好了,但依然循环的情况,这时就要判断是否还在进行比较,
* 如果没有比较说明排序已经好了,可以跳出循环了
* 查找:二分法查找(折半查找):需要数组已经排序好了;将整个数组对折,然后将目标数和中间数
* 进行比较,如果目标数比中间数大,那么目标数就是在右边,反之,目标数在左边(如何目标数
* 等于中间数,那么就找出来了);然后以中间数下标+1的数作为起始来再进行对折,以此类推,
* 直到找到目标数。
要导的包:
import java.util.Arrays;
冒泡排序,我们分步骤来看代码,对下面这个数组进行排序:
int[] nums = {2,9,0,7,6,1};
按照冒泡排序的原理,我们要挨个挨个的比较:
int temp;
for (int i = 0; i <nums.length-1 ; i++) {
//比较大小
if(nums[i]>nums[i+1]){
temp = nums[i];
nums[i] = nums[i+1];
nums[i+1]=temp;
// flag = false;//false说明任然在比较,没排序完
}
System.out.println(Arrays.toString(nums));
}
结果是:
[2, 9, 0, 7, 6, 1]
[2, 0, 9, 7, 6, 1]
[2, 0, 7, 9, 6, 1]
[2, 0, 7, 6, 9, 1]
[2, 0, 7, 6, 1, 9]
比较出最大的那个了,那么我们要继续比较,就需要在外面在加一层循环
int[] nums = {2,9,0,7,6,1};
int temp;
for (int j = 0; j <nums.length-1 ; j++) {
// boolean flag = true;//判断是否在比较,true说明已经排序完了
for (int i = 0; i <nums.length-1 ; i++) {
//比较大小
if(nums[i]>nums[i+1]){
temp = nums[i];
nums[i] = nums[i+1];
nums[i+1]=temp;
// flag = false;//false说明任然在比较,没排序完
}
System.out.println(Arrays.toString(nums));
}
// if(flag){//为true时,排序完了,跳出循环
// break;
// }
}
执行,结果:(结果太长,中间省略了)
[2, 9, 0, 7, 6, 1]
[2, 0, 9, 7, 6, 1]
[2, 0, 7, 9, 6, 1]
[2, 0, 7, 6, 9, 1]
....................
[0, 1, 2, 6, 7, 9]
[0, 1, 2, 6, 7, 9]
[0, 1, 2, 6, 7, 9]
那么我们发现已经排序好了也还在循环,我们优化一下,也就是把上面的注释的部分加上,回发现结果要短了很多。