简单记录三种排序方法
public class Sorts{
public static int[] bubbleSort(int[] input){//冒泡排序
int temp;
boolean flag;//用于标记是否已经排好
for(int i=0; i< input.length;i++){//一共走了length-1次
flag=false;//每一轮交换开始都生命现在没有开始排
for(int k=input.length-1;k>i;k--){//k-1是数组最后一个往回遍历交换
if(input[k]<input[k-1]){
temp=input[k-1];
input[k-1]=input[k];
input[k]=temp;
flag=true;//如果在一趟排序中发生交换证明这一轮还是发生了排序,没有排好
}
}
if(!flag){break;}//如果一轮排序中没有发生交换证明已经排好
}//bubblesort的排序方法是保证每次确定把minimum value推到最前面(合适的位置)
//时间复杂度(O(n2))
return input;
}
public static int[] selectSort(int[] input){//选择排序
int miniIndex=0;//初始化最小的是数组第一位
int temp;
for(int i=0;i<input.length;i++){//遍历input.length轮
miniIndex=i;//设置最小值是当前遍历的起点
for(int k=i;k<input.length;k++){
if(input[k]<input[miniIndex]){
miniIndex=k;//如果遍历到更小的更新最小值index
}
}
temp= input[i];
input[i]=input[miniIndex];
input[miniIndex]=temp;//一轮之后交换当前最小值和遍历的起点
}
return input;
}//时间复杂度(O(n2))
public static int[] insertSort(int[] input){//插入排序
int temp;
for(int i=0;i<input.length-1;i++){//遍历到倒数第二个,最后一个用于插入
for(int k=i+1;k>0;k--){//遍历到第二位
if(input[k]<input[k-1]){//如果第二位大于前面的交换,交换部分相当于bubblesort
temp=input[k];
input[k]=input[k-1];
input[k-1]=temp;
}
}
}
return input;
}
}