// 這邊用 c 簡單驗證, 題目中的 bool 型態先用 int 型態替代
int isInverse(int x, int y, int isAsc) {
// isAsc is true, 表示要遞增排序,但是 x > y, 故為 Inverse,
// 所以回傳 1,否則為 0
if (isAsc == 1)
return ((x > y) ? 1 : 0 );
// isAsc is false,表示要遞減排序,但是 x < y, 故為 Inverse,
// 所以回傳 1,否則為 0
if (isAsc == 0)
return ((x > y) ? 0 : 1 );
return -1;
}
void InsertionSort(int *arr,int len, int isAsc) {
int j,k,temp;
for (int i = 2; i <=n; i++) { // 假設陣列索引值從 1 開始
j = (i - 1), k = i;
while (j > 0 && (isInverse(arr[j], arr[k], isAsc) == 1)) {
temp = arr[k];
arr[k] = arr[j];
arr[j] = temp;
j--;
k--;
}
}
}
}
// 可用以下方式驗證
void main() {
int arr[9] = {-1,2,5,1,19,100,21,-2,15};
InsertionSort(arr,8,1);
for (int i=1;i < 9;i++)
printf("%d ",arr[i]);
}