插入排序模擬整理撲克牌過程:維護已排序區段,逐一將未排序元素插入適當位置。
package Utils.Sort;
public class InsertSort implements SortStrategy {
public void sort(Comparable[] obj) {
if (obj == null) {
throw new NullPointerException("The argument can not be null!");
}
int size = 1;
while (size < obj.length) {
insert(obj, size++, obj[size - 1]);
}
}
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;
}
}
}
}
初始:[已排序 | 未排序]
[ 5 | 2, 4, 6, 1, 3 ]
第1輪:插入 2 → [ 2, 5 | 4, 6, 1, 3 ]
第2輪:插入 4 → [ 2, 4, 5 | 6, 1, 3 ]
第3輪:插入 6 → [ 2, 4, 5, 6 | 1, 3 ] (已在正確位置,無位移)
第4輪:插入 1 → [ 1, 2, 4, 5, 6 | 3 ]
第5輪:插入 3 → [ 1, 2, 3, 4, 5, 6 | ]
System.out.println(obj[i]) 影響效能Arrays.sort() 對物件陣列使用 TimSort(合併排序+插入排序混合),對基本型別使用 雙軸快速排序。自行實作主要為教學或特殊約束場景。