交换方法
public static void swap(int[] arr, int index1, int index2){
arr[index1] ^= arr[index2];
arr[index2] ^= arr[index1];
arr[index1] ^= arr[index2];
}
一、选择排序
public static void selectionSort(int[] arr){
for (int i = 0; i < arr.length; i++) {
int minPos = i;
for (int j = i + 1; j < arr.length; j++) {
if(arr[j] < arr[minPos]){
minPos = j;
}
}
if(i == minPos){
continue;
}
swap(arr,i, minPos);
}
}
二、冒泡排序
public static void bubbleSort(int[] arr){
int len = arr.length;
for(int P = len-1; P >= 0; P--){
//判断是否排序完成
int flag = 0;
for(int i = 0; i < P; i++){
if(arr[i] > arr[i+1]){
swap(arr,i, i+1);
flag = 1;
}
}
//数组有序后,退出
if(flag == 0) {
break;
}
}
}
三、插入排序
public static void insertionSort(int[] arr){
int len = arr.length;
for(int i = 1; i < len; i++){
int temp = arr[i];
int j = 0;
for(j = i; j > 0 && arr[j-1] > temp; j--){
arr[j] = arr[j-1];
}
arr[j] = temp;
}
}
四、希尔排序
优化的选择排序,按照间隔进行排序。默认间隔是N/2。
public static void shellSort(int[] arr){
int len = arr.length;
for(int D = len/2; D > 0; D /= 2){
for(int P = D; P < len; P++){
int temp = arr[P];
int j = 0;
for(j = P; j >= D && arr[j - D] > temp; j -= D){
arr[j] = arr[j-D];
}
arr[j] = temp;
}
}
}