有一个已经有序的数据序列,要求在这个已经牌号的数据序列中插入一个数,但要求插入后此数据序列仍然有序,插入排序法插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的,个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。它是稳定的排序方法,插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置。
该算法在数据规模小的时候十分高效,该算法每次插入第K+1到前K个有序数组中一个合适位置,K从0开始到N-1从而完成排序。
publicclass InsertedSorter<E extends Comparable<E>> extends Sorter<E> {
@Override
publicvoid sort(E[] array, int from, int len) {
// TODO Auto-generated method stub
E tmp=null;
for(int i=from+1;i<from+len;i++){
tmp=array[i];
int j=i;
for(;j>from;j--){
if(tmp.compareTo(array[j-1])<0){
array[j]=array[j-1];
}else{
break;
}
}
array[j]=tmp;
}
}
publicstaticvoid main(String[] args){
InsertedSorter s1 = new InsertedSorter<String>();
String[] myStringArray1 = {"2","5","1","9","4"};
for(int i=0;i<5;i++){
System.out.println(myStringArray1[i]);
}
s1.sort(myStringArray1, 0, 5);
for(int i=0;i<5;i++){
System.out.println(myStringArray1[i]);
}
}
}
publicabstractclass Sorter<E extends Comparable<E>> {
publicabstractvoid sort(E[] array,int from ,int len);
publicfinalvoid sort(E[] array)
{
sort(array,0,array.length);
}
protectedfinalvoid swap(E[] array,int from ,int to)
{
E tmp=array[from];
array[from]=array[to];
array[to]=tmp;
}
publicvoid sort(String helloString, int from, int len) {
// TODO Auto-generated method stub
}
}