直接插入排序实现代码:
- 说明:直接插入排序主要是设置哨兵;
- 每次与前一位进行比较,如果小则,更换哨兵,进行移位比较;
- 哨兵还有一个重要作用就是:防止移位比较的时候溢出;
一
/**
* 时间更少
* @param list
*/
static public void straightInsertionSort2(List<Integer> list) {
Integer tag = list.get(0);
int i,j;
for(i = 1;i<list.size();i++){
if (list.get(i) < list.get(i-1)) {
tag = list.get(i);
for(j=i-1;j >-1 &&list.get(j) > tag;j--){
list.set(j+1, list.get(j));
}
list.set(j+1, tag);
}
}
}
二.
/**
* 直接插入排序
* @param list
*/
static public void straightInsertionSort(List<Integer> list) {
list.add(0, list.get(0));//哨兵
System.out.println(list);
int i,j;
for(i = 2;i<list.size();i++){
if (list.get(i) < list.get(i-1)) {
list.set(0, list.get(i));
for(j=i-1;list.get(j) > list.get(0);j--){
list.set(j+1, list.get(j));
}
list.set(j+1, list.get(0));
}
}
list.remove(0);
}
//交换元素
static public void swap(List<Integer> list,int i,int j) {
Integer first = list.get(i);
Integer second = list.get(j);
list.set(i, second);
list.set(j, first);
}