java 数据结构之选择排序和插入排序
一 选择排序:
因为冒泡排序,感觉没必要写,因为大家应用的基本就是它,所以我今天谈谈选择排序,选择排序属于较为简单的排序方法为基本应必须掌握的排序方法。选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
上图是我理解的基本选择排序的流程。我觉得跟冒泡有异曲同工之处。
/*
* 选择排序
*/
public static<T extends Comparable<T>> void selectSort(T[] arr){
if(arr==null ||arr.length==0){ //安全判断
return ;
}
int minIndex=0; //定义最小值
for(int i=0;i<arr.length-1;i++){ //最小值下标的后移
minIndex=i;
for(int j=i+1;j<arr.length-1;j++){
if(arr[j].compareTo(arr[minIndex])<0){
minIndex=j; //记录最小值的下标
}
}
T temp=arr[i]; //值的交换
arr[i]=arr[minIndex];
arr[minIndex]=temp;
}
}
二 插入排序:
插入排序也是比较实用的排序方法,插入排序的基本思想是:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
上图是我所理解的插入排序的流程。
/*
* 插入排序
*/
public static<T extends Comparable<T>> void insertSort(T[] arr){
if(arr ==null || arr.length<2){ //安全处理
return ;
}
for(int i=1;i<arr.length-1;i++){ //从下标为1开始,后面的插入
for(int j=i;j>0;j--){ //数数列
if(arr[j].compareTo(arr[j-1])<0){ //找到合适位置插入
T temp=arr[j];
arr[j]=arr[j-1];
arr[j-11]=temp;
}else{
break; //如果不用移,跳出循环。
}
}
}
}