此文介绍了冒泡排序、选择排序、插入排序
排序可视化网站 https://visualgo.net/zh/sorting 可以更快速理解!
本文会随着作者日常学习进行补充及内容修正
1.冒泡排序
通过多次遍历,判断相邻两个之间大小,每次都能取到最大值
第一次遍历0~N-1 最大值为N-1位
第二次遍历0~N-2 第二大值为N-2位
。。。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public static void bubbleSort(int[] arr){ if(arr == null || arr.length < 2){ return; } for(int e = arr.length - 1;e > 0;e--){ for(int i = 0;i < e;i++){ if(arr[i] > arr[i+1]){ swap(arr,i,i++); } } } }
public static void swap(int[] arr ,int i,int j){ arr[i]=arr[i]^arr[j]; arr[j]=arr[i]^arr[j]; arr[i]=arr[i]^arr[j]; }
|
2.选择排序
遍历查找最小值,然后交互位置
第一次遍历0~N-1 最小值为第0位
第二次遍历1~N-1 第二小值为第1位
。。。。
总结为i~N-1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public static void selectSort(int[] arr){ if(arr == null || arr.length < 2){ return; } for(int i = 0;i < arr.length - 1;i++){ int minIndex = i; for(int j = i + 1;j < arr.length;j++){ minIndex = arr[j] < arr[mindex] ? j :minIndex; } swap(arr, i ,minIndex) } }
public static void swap(int[] arr ,int i,int j){ int temp =arr[i]; arr[i] =arr[j]; arr[j]=temp; }
|
3.插入排序
0~1上有序
0~2上有序
。。。。
0~i上有序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public static void insertSort(int[] arr){ if(arr == null || arr.length < 2){ return; } for(int i = 1; i < arr.length; i++){ for(int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--){ swap(arr, j ,j + 1); } } }
public static void swap(int[] arr ,int i,int j){ arr[i]=arr[i]^arr[j]; arr[j]=arr[i]^arr[j]; arr[i]=arr[i]^arr[j]; }
|