1.选择排序找到最小位置的index然后和前面交换。
private static void selectionSort(int[] arr){
int n = arr.length;
for(int i=0;i<n;i++){
// 寻找[i,n]的最小值
int minIndex = i;
for(int j=i+1;j<n;j++){
if(arr[j]<arr[minIndex]){
minIndex = j;
}
}
swap(arr,i,minIndex);
}
}
2.插入排序将待排序元素放到前面排好序的数组合适的位置
public static void insertionSort(int arr[]){
for(int i=1;i<arr.length;i++){
for(int j=i;j>0 && arr[j]<arr[j-1];j--){
SortTestHelper.swap(arr,j,j-1);
}
}
}
/**
* 改进版本---交换操作转换为赋值操作
* @param arr
*/
public static void insertionSortPlus(int arr[]){
for(int i=1;i<arr.length;i++){
//寻找元素arr[i]合适的插入位置
int tmp = arr[i];
int j; //j保存元素tmp应该插入的位置
for(j=i;j>0 && arr[j-1]>tmp;j--){
arr[j] = arr[j-1];
}
arr[j] = tmp;
}
}
3.冒泡排序-每次排序都把后面小的往前交换,每次排序最小的都被排到最前方
public static void bubbleSort(int[] arr){
int n = arr.length;
for(int i=0;i<n;i++){
for(int j=n-1;j>i;j--){
if(arr[j]<arr[j-1]){
SortTestHelper.swap(arr,j,j-1);
}
}
}
}