选择排序、冒泡排序、插入排序
原创
©著作权归作者所有:来自51CTO博客作者p340223的原创作品,请联系作者获取转载授权,否则将追究法律责任
选择
public static void selectionSort(int[] arr){
if (null==arr||arr.length<2)
return;
/*
每次选出最小值,外循环0~N-1 每个内循环i~N-1
*/
for (int i = 0; i < arr.length; i++) {
int index = i;
for(int j=i+1;j<arr.length;j++){
index = arr[j] < arr[index] ? j : index;
}
swap1(arr,i,index);
}
}
冒泡
public static void bubbleSort(int[] arr){
if (null==arr||arr.length<2)
return;
/*
每次把最大值冒泡到最后位置,外循环0~N-1 每个内循环i~N-1
*/
for (int i = arr.length-1; i >=0; i--) {
for (int j=0;j<i;j++){
if (arr[j]>arr[j+1])
swap2(arr,j,j+1);
}
}
}
插入
public static void insertionSort(int[] arr){
if (null==arr||arr.length<2)
return;
/*
0~1
0~2
0~3
每次保证0~i上有序,外循环1~N-1,内循环i-1~0从右往左依次比较保证有序
*/
for (int i = 1; i < arr.length; i++) {
for (int j=i-1;j>=0&&arr[j]<arr[j+1];j--){
swap1(arr,j,j+1);
}
}
}
数组中两个值交换位置
适合所有场景
public static void swap1(int[] arr,int i,int j){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
仅适合数字类型
public static void swap2(int[] arr,int i, int j){
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}