排序算法 -- 冒泡排序(java)
冒泡排序的算法思想:
1. 一轮冒泡:从头到尾扫描数组,相邻元素j和j+1依次比较,如果逆序则交换,这样一轮冒泡扫描之后 最值已经放入到数组的最后
2. 需要进行n-1轮次(每轮扫描的数组大小减去1,最后只是剩下一个元素的数组时无需冒泡扫描)的冒泡,每轮冒泡确定一个最值放在数组的最后,每轮冒泡的数组的大小减去1
代码实现:
class Demo { public static void main(String[] args){ int[] nums = {1,9,5,2}; bubbleSort(nums); System.out.println(Arrays.toString(nums)); } public static void bubbleSort(int[] arr){ //优化:如果遇到某一个轮次没有进行交换,则说明数组已经排列有序,无需进行后续的轮次扫描 boolean changed = true; //轮次 for(int i = 0;(i < arr.length - 1)&& changed;i++){ // 只是剩下一个元素的数组的时候 不用进行冒泡扫描 changed = false; for(int j = 0;j < arr.length - 1 - i;j++) { // 本次扫描的数组的大小,都在变小,需要保证j+1的值在数组的范围 if (arr[j] > arr[j+1]) { // 逆序则交换,这里是按照升序排列 swap(arr, j, j+1); changed = true; } } } public static void swap(int[] arr,int i,int j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } }


浙公网安备 33010602011771号