冒泡排序
冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。关键点:
1)N个元素,有N轮冒泡
2)每一轮,都从第一个元素开始,依次与其下一个比较,是否需要交换
public void bubbleSort() {int[] data = {4, 5, 6, 3, 2, 1};System.out.println("未排序=" + Arrays.toString(data));// 从小到大排序for (int i = 0; i < data.length; i++) {// 是否有交互数据boolean swap = false;for (int j = 0; j < data.length - i - 1; j++) {if (data[j] > data[j + 1]) {int t = data[j];data[j] = data[j + 1];data[j + 1] = t;swap = true;}}System.out.println(String.format("第%d轮", i + 1) + "=" + Arrays.toString(data) + ",swap=" + swap);if (!swap) {break;}}}
选择排序
选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾
public class SelectionSort implements IArraySort {@Overridepublic int[] sort(int[] sourceArray) throws Exception {int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);// 总共要经过 N-1 轮比较for (int i = 0; i < arr.length - 1; i++) {int min = i;// 每轮需要比较的次数 N-ifor (int j = i + 1; j < arr.length; j++) {if (arr[j] < arr[min]) {// 记录目前能找到的最小值元素的下标min = j;}}// 将找到的最小值和i位置所在的值进行交换if (i != min) {int tmp = arr[i];arr[i] = arr[min];arr[min] = tmp;}}return arr;}}
