版权声明: https://blog.csdn.net/wangzhonglinqwe/article/details/82850926
交换函数:
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];
}
public static void swapbyLogicCom(int a,int b) {
// a = (a^b)^b
b = a^b;
a = b^a;
b = b^a;
}
- 插入排序(稳定)无辅助
原因:每次从头往后找最小,如果相同则放在相同数的后面;原本两者的前后顺序并没有改变
代码实现:由于两层循环时间复杂度0(n^2),空间复杂度0(1)
public class directInsertSort {
public static void main(String[] args) {
int[] arr = {1,-8,2,10,-5,2888,94,-45,0};
sort(arr);
System.out.println(Arrays.toString(arr));
}
public static void sort(int[] arr) {
int size = arr.length;
int index ,temp =0;
for(int i = 0 ; i < size ; i ++) {
temp = arr[i];
index = i;
int min = arr[i];
for(int j = i ; j < size ; j ++) {
if(min > arr[j]) {//该处不能等于,会导致不稳定
min = arr[j];
index = j ;
}
}
arr[i] = min;
arr[index] = temp;
}
}
}
2、选择排序(不稳定有辅助)
不稳定在于:存在 1 5 5 2 第二次两个5的位置发生的调换