package Utils.Sort;
/**
*插入排序,要求待排序的數組必須實現Comparable接口
*/
public class InsertSort implements SortStrategy
{ /**
*利用插入排序算法對obj進行排序
*/
public void sort(Comparable []obj)
{ if (obj == null)
{ throw new NullPointerException("The argument can not be null!");
}
/*
*對數組中的第i個元素,認為它前面的i - 1個已經排序好,然後將它插 入到前面的i - 1個元素中
*/
int size = 1;
while (size < obj.length)
{ insert(obj, size++, obj[size - 1]);
} }
/**
*在已經排序好的數組中插入一個元素,使插入後的數組仍然有序
*@param obj 已經排序好的數組
*@param size 已經排序好的數組的大小
*@param c 待插入的元素
*/
private void insert(Comparable []obj, int size, Comparable c)
{ for (int i = 0 ;i < size ;i++ )
{ if (c.compareTo(obj[i]) < 0)
{ System.out.println(obj[i]);
//如果待插入的元素小於當前元素,則把當前元素後面的 元素依次後移一位
for (int j = size ;j > i ;j-- )
{ obj[j] = obj[j - 1];
}
obj[i] = c;
break;
}
}
}
}