采用哨兵位的直接插入排序,是要将待排序序列的第一个位置留出来设立为哨兵位置,所以需要注意的在定义序列时要多给一个空间。
这样做的好处就是不用设立临时变量。
代码实现如下:
//哨兵位直接插入排序
void Sort(int* arr, int left, int right)
{
for (int i = left + 1; i < right; i++) //right即待排序序列元素个数
{
arr[0] = arr[i];//待排序的值放到哨兵位 即arr[0]
int end = i; //待排序值的下标
while (arr[0] < arr[end-1])
{
arr[end] = arr[end - 1];
end--;
}
arr[end] = arr[0];
}
}
注意: 给Sort函数传参时,要注意left值的传参,用上图例子来说明,调用Sort函数时,要这样写Sort(arr,1,7);