- 选择排序
- 背景: 一个长度为5的乱序数组
- 实现思路:循环遍历,从5个数中获取最大的值跟第一位交换,再从四个数中获取最大值跟第二位置交换,依次类推从大到小排序。
- 实现方法:
- 先从 0 - 4 中选择一个最小值,把最小值和第一位 做位置交换
- 再从 1 - 4 中选择一个最小值,把最小值和第二位 做位置交换
- … …
- 以此类推,直到结束
public static void selectSort(int[] arr){
if(arr == null || arr.length<2){
return;
}
for (int i = 0; i < arr.length; i++) {
int minValueLocation = i;
for (int j = i+1; j < arr.length; j++) {
minValueLocation = arr[minValueLocation]>arr[j]?j:minValueLocation;
}
swep(arr,i,minValueLocation);
}
}
- 冒泡排序
- 背景: 一个长度为5的乱序数组
- 实现思路:(遍历第一遍,找到最大值,放在最高位置上)
- 第一次外循环 ( 0 – 5)
- 拿第一个数和第二个数做比较,如果第一个数大,则交换位置,反之则不处理
- 再拿第二个数和第三个数做比较,以此类推
- 第一次内循环结束后,位置为5的为数组中的最大值
- 再开始第二次外循环(0 – 4)
- … …
- 以此类推,直到结束
public static void bubbleSort(int[] arr){
if(arr == null || arr.length<2){
return;
}
int length = arr.length;
for (int i = length; i > 0; i--) {
for (int j = 0; j < length-1; j++) {
if(arr[j]>arr[j+1]){
swep(arr,j,j+1);
}
}
}
}
- 插入排序
- 背景: 一个长度为5的乱序数组
- 实现思路:(拿后面的数跟前面的数比较,最后结果最大的数在最高位上)
- 从第二个位置开始比较
- 再从第三个位置开始比较
- 先拿第三个数和第二个数比较
- 如果第三个数比第二个数小,则交换位置
- 如果第三个数比第二个数大,则保持不变
public static void insertSort(int[] arr){
if(arr == null || arr.length<2){
return;
}
int length = arr.length;
for (int i = 1; i < length; i++) {
for (int j = i-1; j >= 0; j--) {
if(arr[j+1]<arr[j]){
swep(arr,j,j+1);
}
}
}
}
public static void main(String[] args) {
int[] arr = {1,3,2,4,5,3,1,54,2,3,4,5,1,0};
System.out.println(Arrays.toString(arr));
insertSort(arr);
System.err.println(Arrays.toString(arr));
}
public static void swep(int[] arr,int bigLovation,int minLovation){
int minValue = arr[bigLovation];
arr[bigLovation] = arr[minLovation];
arr[minLovation] = minValue;
}