1.冒泡
/**
* 冒泡排序
* 稳定
* 时间 1+2+...+n = n(n+1)/2
* 时间复杂度 n^2
* @param data
*/
public static void sort2(int[] data){
for (int i=0;i<data.length;i++){
for(int j=data.length-1;j>i;j--){
if(data[j]<data[j-1]){
int tmp = data[j];
data[j] = data[j-1];
data[j-1] = tmp;
}
}
}
}
2.插入
/**
* 插入排序 每次找一个新的数值,往已有顺序的序列中通过比较找到合适位置插入
* 稳定
* 时间1+2+ ... +n = n(n+1)/2
* 时间复杂度n^2
* @param data
*/
public static void sort2(int[] data){
for (int i = 0; i< data.length-1; i++){
int j = i +1;
for(;j>0;j--){
if(data[j]<data[j-1]){
int tmp = data[j];
data[j] = data[j-1];
data[j-1] = tmp;
}
}
}
}
3.选择
/**
* 选择排序
* 不稳定 举例:序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法
* 时间复杂度n^2
* @param data
*/
public static void sort2(int[] data){
for(int i=0;i<data.length;i++){
int j = i + 1;
int tmp = i;
for(;j<data.length;j++){
if(data[j]<data[tmp]){
tmp = j;
}
}
int tmp2 = data[tmp];
data[tmp] = data[i];
data[i] = tmp2;
}
}
public static void main(String[] args) {
int[] data = {4,2,3,9,6,8};
System.out.println(data + Arrays.toString(data));
sort2(data);//排序成功,说明数组是引用传递
System.out.println(data + Arrays.toString(data));
}