本篇开始学习排序,主要学习冒泡,选择,二分查找三种基本的排序算法。这三个排序算法,不用讲,面试之前必须要准备的,个人意见,即使背也要背下来。这三个经常在面试过程中,让你写在黑板上或者白纸上。冒泡是最简单的,二分和选择排序被要求写代码的概率比冒泡要多得多,因为冒泡大家都听过,多少会写一点。
这篇,通过一个数组的冒泡排序过程,先画一个图,然后总结出结论,然后写出冒泡排序代码。
题目
要求给定任意一个整形数组,写一个冒泡排序算法,输出排序后的数组元素。
1.画图和分析出结论
我们通过具体画图演示一个5个元素个数的具体冒泡排序过程。
2.代码实现过程
package sort;
public class Test_MaoPao {
public static void main(String[] args) {
int[] arr = {24,69,80,57,13};
bubbleSort(arr);
}
public static void bubbleSort(int[] arr) {
//1.嵌套for循环
for(int i = 0; i < arr.length-1; i++) { //2.外层控制走几次,需要比较arr.length-1次
for(int j = 0; j < arr.length-1-i; j++) { // 3.内层控制比较几次,注意length-1,为了防止索引越界
// 4.相邻位置两两比较,小的在前,大的在后,进行位置交换
if(arr[j] > arr[j+1]) {
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
// 5. 遍历输出排序后的数组
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+ " ");
}
}
}
上面代码注意,在内层循环中j<arr.length-1-i的作用,-1是为了防止出现索引越界异常,-i是为了提升算法效率,即使不写-i,不影响排序效果。