【面试:基础篇02:冒泡排序】
00.前言
有任何问题还请指出,感谢各位大佬。
01.介绍
冒泡排序顾名思义是一种排序算法 与相邻元素比较 然后交换 因为没一趟的最大/最小值 最终会排序到当前趟的最后位置 所以形象的称为冒泡排序,是排序算法中比较基础的一种,这就意味着我们必须掌握。
02.案例推理
对本数列 {5,2,7,4,1,3,8,9} 进行冒泡排序 顺序从小到大
第一趟
2 5 4 1 3 7 8 9,比较了7次,确定了9是当前趟最后位
第二趟
2 4 1 3 5 7 8 9,比较了6次,确定了8是当前趟最后位
第三趟
2 1 3 4 5 7 8 9,比较了5次,确定了7是当前趟最后位
第四趟
1 2 3 4 5 7 8 9,比较了4次,确定了5是当前趟最后位
第五趟
1 2 3 4 5 7 8 9,比较了3次,确定了4是当前趟最后位
第六趟
1 2 3 4 5 7 8 9,比较了2次,确定了3是当前趟最后位
第七趟
1 2 3 4 5 7 8 9,比较了1次,确定了2是当前趟最后位
完成排序
03.这个案例告诉了我们什么
第一:我们发现了 8个元素 需要7趟排序。
第二:我们发现了 每趟排序只需要比较当前趟没有确定的元素 确定的元素无需比较,即每趟只需比较 元素个数-当前趟数 例如第三趟我们只需要比较 8-3次 因为前两趟已经确定两个值 我们只需要在剩下六个中比较五次 就可以确定第三趟的极值。
第三:我们发现了第四趟就已经排序完成了,但仍然又比较了三趟,这是我们的优化点之一,优化趟数。
第四:我们发现了每趟的次数也可以优化,例如第二趟我们比较了六次,但其实在第一趟比较时就已经确定了7 8 9三个最大值,所以我们其实只用比较剩下5个元素,也就是只需要比较四次,因为我们每趟的次数也减少,所以我们最终的趟数也会随之减少。
04.算法1 无优化
代码
public static void main(String[] args) {
int[] a = {
5,2,7,4,1,3,8,9};
int len = a.length;
for(int i=0;i<len-1;i++){
int cnt=0;
System.out.println("第"+(i+1)+"趟");
for (int j=0;j