直接插入排序
就是把未排序的元素一个一个插入到有序的集合中
public static void insertionSort(int []arr){
for(int i=1;i<arr.length;i++){
insertToRightPosition(arr,i);
}
}
private static void insertToRightPosition(int []arr,int i){
int inserted=arr[i];
int j =i-1;
for(;j>=0&&arr[j]>inserted;j--){
arr[j+1]=arr[j];
}
arr[j+1]=inserted;
}
i指向待插元素,j会遍历有序数组中所有元素,直到找到合适的位置将待插元素插入
选择排序
选择排序就是不断地从未排序的元素中选择最大(最小)的元素放入已排好序的元素集合中,直到未排序中仅剩一个元素
private static void selectSort(int []arr){
for(int i=0;i<arr.length-1;i++){
//i下标左边是已拍好序的元素,右边(包括i)是无序区间
//最小值下标默认是无序区间第一个元素下标
int minIndex=i;
//找到最小值
for(int j=i+1;j<arr.length;j++){
if(arr[j]<arr[minIndex]){
minIndex=j;
}
}
swap(arr,minIndex,i);
}
}
冒泡排序
第一趟比较下来,把最大(最小)的元素交换到最后一个
private static void BubbleSort(int []arr){
int temp=0;
for(int i=0;i<arr.length-1;i++){//一共n-1趟
for(int j = 0;j<arr.length-1-i;j++){//第i+1趟时,需要比较arr.length-1-i次
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}