我目前正在编写快速排序算法的实现,并且我有一个效率问题,特别是关于对数组进行分区。我在排序之前对数组进行分区的方式涉及选择枢轴或分区元素作为数组中的第一个元素(我知道。这不是最有效的方法),然后设置两个变量 - “高”和“低” - 分别是数组的最后一个索引和第一个索引。我有一个 while 循环设置,它通过切换某些元素并递增和递减低和高直到它们相等来对数组进行分区。
我的问题是我正在使用 switch 语句来控制要移动的索引,而不是设置两个单独的 while 循环来执行此操作。在这种情况下使用 switch 语句是否更有效?
以下是相关代码:
//used to determine which side of the array to move the element to
#define RIGHT 1
#define LEFT 0
void partition( int nums[], int size )
{
int pivot = nums[0], low = 0, high = size - 1, turn = LEFT;
while ( low != high )
{
switch (turn)
{
case RIGHT:
if ( nums[low] >= pivot )
{
nums[high] = nums[low];
high--;
turn = LEFT;
}
else
low++;
break;
case LEFT:
if ( nums[high] <= pivot )
{
nums[low] = nums[high];
low++;
turn = RIGHT;
}
else
high--;
break;
}
}
nums[low] = pivot;
}