1.排序-冒泡排序

Posted 一个超级努力的互联网小小少年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.排序-冒泡排序相关的知识,希望对你有一定的参考价值。

  • 1.1.冒泡排序基本思想

冒泡排序基本思想是:一个数组从前往后(或者从后往前)两两比较相邻的元素,若为逆序(N[i-1] > N[i]),则进行交换,知道序列比较完,我们称为第一趟冒泡,结果是将最小的元素交换到待排序的第一个位置上(或者将较大的元素交换到待排序的最后一个位置上)。关键字较小的元素如同气泡一样往上漂浮直至水面。下一趟冒泡时,前一趟确定的元素不再参与比较,每趟冒泡结果是把序列中最小的元素(或者最大的元素)放到序列的最终位置。这样最多遍历n-1次就可实现对一个数组进行元素的排序。

  • 1.2.动画演示

  • 1.3.代码实现

    1.3.1.基本冒泡排序算法

public static void main(String[] args) { int []N = {1,9,6,4,2,8,3,7}; int[] ints = bubbleSort_1(N); for(int i : ints){ System.out.print(i); }}public static int [] bubbleSort_1(int [] N){ if (N.length == 0){return null;} for (int i = 0; i < N.length; i++) { for (int j = 0; j < N.length; j++) { if (N[i] < N[j]){ int temp = N[i]; N[i] = N[j]; N[j] = temp; } } } return N;}

通过双重for循环遍历,每次当前元素与当前元素之后的元素依次进行比较。直到最后一个元素比较完成,即将完成了对该数组的排序。

         1.3.2.优化排序冒泡排序算法

public static int [] bubbleSort_2(int[]N){ if (N.length == 0){return null;} boolean flag = false; for (int i = 0; i < N.length; i++) { flag = true; for (int j = 0; j < N.length; j++) { if (N[i] < N[j]){ flag = false; int temp = N[i]; N[i] = N[j]; N[j] = temp; } } if (!flag){ continue; } }        return N;}

优化之后,我们引入标志位,初始进入for循环,设置它的标志位为true,再次进入第二次 for循环之后,满足if条件之后,我们设置标志位为false,再做交换操作。完成当前一轮的比较之后,下次再进行比较,看是否已经提前完成排序(用 hasSorted)。如是,则提前结束。

  • 1.4.时间复杂度与空间复杂度分析

空间效率:仅仅使用了一个常数个辅助单元进行交换两个位置的元素,因此空间复杂度为O();

时间效率:最坏情况下时间复杂度为O(n^2),最好情况下时间复杂度为O(n),平均时间复杂度为O(n^2)。



感谢大家可以 关注,点赞,转发,评论


以上是关于1.排序-冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

冒泡排序和鸡尾酒排序的代码分析

冒泡排序

总结:大厂面试常考手撕代码 —— JavaScript排序算法(冒泡排序选择排序插入排序快速排序)

冒泡排序与快速排序

冒泡排序与快速排序

数组排序代码,冒泡排序&快速排序&选择排序