版权声明:Songcz原创,如有转载请注明出处 https://blog.csdn.net/weixin_43701058/article/details/89893754
经过阿里的摧残,决定重新学习下数据结构与算法。
最近也有和同学聊面试的事,上个月有同学去东软面试,让他手撕算法写个冒泡排序。第一个学的排序算法就是冒泡排序,大一学C语言的时候就是冒泡排序,那就从冒泡排序开始我的学习之旅吧。
冒泡排序是一种稳定的,交换排序。
原理:比较两个相邻的元素,根据需求,将值大的元素交换至右/左端。
思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。(小到大)
时间复杂度:O(n2)最好情况O(n)
空间复杂度:O(l)
代码实现
import java.util.Arrays;
/**
* 冒泡排序,从小到大
* @author scz
*/
public class BubbleSort {
public static void bubbleSort(int[] a){
int i,j = 0;
for(i = 0; i < a.length; i++){//数组多长就循环多少次
int temp;//临时存储空间
for(j = 1; j < a.length-i; j++){
if(a[j-1] > a[j])
{
temp = a[j-1];
a[j-1] = a[j];
a[j] =temp;//核心
}
}
System.out.println(Arrays.toString(a));
}
}
public static void main(String[] args){
int[] a = {5,4,7,6,2,8};
BubbleSort.bubbleSort(a);
}
}
效果
冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。即每一趟之后等至少会多有一个元素处于正确位置。
缺点:时间复杂度高,效率低,每次只能每一趟排序操作只能找到一个最大值或最小值,为了解决这个问题,我们将改进冒泡排序,也就是下一篇中要说的快速排序。