插入排序基本原理
每次從【未排序】中選取第一個元素放置到【已排序】的正確位置
版本1:直接開辟n的空間
版本2:直接插入排序,無哨兵
Sort::DirectInsertionSort_2() {
int tmp;
/*從[1]開始,[0]已經有序了*/
for(int i = 1; i < sorted.size(); i++) {
/*反之,[i]的位置本來就是正確的,不需要交換*/
if(sorted[i] < sorted[i-1]) {
tmp = sorted[i];
moveTimes++;
int j = i - 1;
/*每次循環(huán)把[i]插入到[0:i-1]的正確位置*/
for(; j >= 0 && tmp < sorted[j]; j--) {
compareTimes++;
sorted[j+1] = sorted[j]; //后移
moveTimes++;
}
compareTimes++;
sorted[j+1] = tmp;
moveTimes++;
}
}
}