关于直接插入排序的理解和思路
首先从其定义来理解:
插入排序:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
算法描述:
1、一个待排数组分成两部分:第一个元素看做已经排好的序列和后面所有的未排好的序列
2、取出未排好序列中的第一个元素key,与已经排好的序列中的元素从后向前进行比较
3、若前面的已经排好的序列中的元素data[i]大于key的值,则将data[i]移到下一位置data[i+1]
4、重复步骤3,直到找到已排序的元素小于或者等于key的位置,
5、将key的值插入到该位置后一个位置
6、进入(循环)重复2-5直到所有的元素都排好序为止
关于比较整数和字符串用到了接口 Comparable中的compareTo方法
因为Integer和String都实现了comparable都实现了Comparable接口
所以测试数据的时候通过使用 Comparable声明一个整型或字符串的数组即可
代码如下仅供参考:
package com.cslience.test;
/*
* author:cslience
* time:2013/11/26
*/
public class InsertionSort {
public void insertSort(Comparable[] data){
for(int i=1;i<data.length;i++){
Comparable key=data[i];
int j=i;
//关键字与其前面已排好的序列(从后向前顺次)进行比较
while(j>0&&key.compareTo(data[j-1])<0){
//将大的数向后移动一个位置
data[j]=data[j-1];
j--;
}
data[j]=key;
}
}
//打印出数组中的所有元素
public void show(Comparable[] data){
for(int i=0;i<data.length;i++){
System.out.println(data[i]);
}
}
public static void main(String[] args)
{
// 测试数据
Comparable[] data1={10,3,15,9,0};
Comparable[] data2={"abc","abd","bca","bad","aaa"};
InsertionSort insert=new InsertionSort();
System.out.println("插入排序从小到大排列数组:");
insert.insertSort(data1);
insert.show(data1);
System.out.println("插入排序从小到大排序字符串:");
insert.insertSort(data2);
insert.show(data2);
}
}