选择排序
1、从 0~N-1位置对数组遍历,比较,记录最小值,与0位置进行交换;
2、从1~N-1位置对数组遍历、比较,记录最小值,与1位置进行交换;
3、…
时间复杂度O(N^2)
public static void SelectionSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[i]) {
swap(arr,i,j);
}
}
}
}
public static void swap(int[]arr,int i, int j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
}
冒泡排序
1、从0~N-1左往右遍历、比较,交换位置;
2、从0~N-2左往右遍历、比较,交换位置;
3.……
时间复杂度O(N^2)
public static void BubbleSort(int[]arr){
for(int i =arr.length-1;i>0;i--){
for(int j =0;j<i;j++){
if(arr[j]>arr[j+1]){
swap(arr,j,j+1);
}
}
}
}
插入排序
1、做到0~1位置上有序;
若1位置比0位置小,交换
2、0~2位置上有序;
若2位置比1位置小,交换;
若1位置比0位置小,交换
若2位置比0位置小,交换
3…
可以看到,插入排序的时间复杂度与数据状况有关,当数组原本就有序时,只遍历不交换,此时时间复杂度为:
O(N)
但最坏的情况时,数组与需求倒序,此时时间复杂度为:
O(N^2)
public static void InsertSort(int[]arr){
for(int i=1;i<arr.length;i++){
for(int j = i-1;j>=0&&arr[j]>arr[j+1];j--){
swap(arr,j,j+1);
}
}
}