以上为插入排序算法的两种实现。
package paixu;
public class charu {
public static void main(String[] args) {
/*插入排序:分为带哨兵和不带哨兵的排序,主要区别是带哨兵的排序选择
* 用a[0]来存储新插入的元素,而不带哨兵的用的是临时变量,
* 这样,带哨兵的插入排序就不用每次插入时都要检查是否越过边界了,因为
* a[0]>a[new]为false,但是这也意味着带哨兵的插入排序需要放弃
* 排序数组的第一个存储位置
*/
int[] a={3,5,3,7,10,9};
//int[]b=sort1(a);
/*for(int s:b){
System.out.println(s);
}*/
int []c=sort2(a);
for(int ss:c){
System.out.println(ss);
}
}
//带哨兵的插入排序。
public static int[]sort1(int[]a){
for(int i=2;i<a.length;i++){
//为什么i=2?因为放弃了第一个元素,所以要从第二个元素开始
if(a[i]<a[i-1]){
a[0]=a[i];
int j;
for(j=i-1;a[j]>a[0];j--){
a[j+1]=a[j];
}
a[j+1]=a[0];
}
}
return a;
}
//不带哨兵的插入排序
public static int[]sort2(int[]a){
for(int i=1;i<a.length;i++){
if(a[i]<a[i-1]){
int j;
int temp=a[i];
for(j=i-1;a[j]>temp&&j>=0;j--){
a[j+1]=a[j];
}
a[j+1]=temp;
}
}
return a;
}
}