面试时的 Java 数据结构与算法查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中
因为其实现代码较短,应用较常见
所以在面试中经常会问到排序算法及其相关的问题
但万变不离其宗,只要熟悉了思想, 灵活运用也不是难事
一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码
对这两种排序的代码一定要信手拈来才行
还有插入排序、冒泡排序、堆排序、基数排序、桶排序等
面试官对于这些排序可能会要求比较各自的优劣、各种算法的思想及其使用场景
还有要会分析算法的时间和空间复杂度
通常查找和排序算法的考察是面试的开始,如果这些问题回答不好, 估计面试官都没有继续面试下去的兴趣都没了
所以想开个好头就要把常见的排序算法思想及其特点要熟练掌握,有必要时要熟练写出代码
接下来我们就分析一下常见的排序算法及其使用场景
限于篇幅, 某些算法的详细演示和图示请自行寻找详细的参考
冒泡排序冒泡排序是最简单的排序之一了,其大体思想就是通过与相邻元素的比较和交换来把小的数交换到最前面
这个过程类似于水泡向上升一样,因此而得名
举个栗子,对 5,3,8,6,4 这个无序序列进行冒泡排序
首先从后向前冒泡, 4 和 6 比较,把 4 交换到前面, 序列变成 5,3,8,4,6
同理 4 和 8 交换,变成5,3,4,8,6,3 和 4 无需交换
5 和 3 交换,变成3,5,4,8,6,3
这样一次冒泡就完了, 把最小的数3 排到最前面了
对剩下的序列依次冒泡就会得到一个有序序列
冒泡排序的时间复杂度为O(n^2)
实现代码:/** *@Description: 冒泡排序算法实现*@author 王旭*/ public class BubbleSort { public static void bubbleSort(int[] arr) { if(arr