在《用C++编程入门》第6版书中,它解释了用C++进行冒泡排序的算法,并且我理解它,但是有两行代码我不明白为什么它们会出现在代码中,当我试图理解代码时我会擦除它们并没有任何改变,算法仍然有效。
所以我仍然对他们感到困惑。
有代码;
int main()
{
int numbers[4] = {23, 46, 12, 35};
int sub = 0; //keeps track of subscripts
int temp = 0; //variable used for swapping
int maxSub = 3; //maximum subscript
int lastSwap = 0; //position of last swap
char swap = 'Y'; //indicates if a swap was made
//repeat loop instructions as long as a swap was made
while (swap == 'Y')
{
swap = 'N'; //assume no swaps are necessary
sub = 0; //begin comparing with first
//array element
//compare adjacent array elements to determine
//compare adjacent array elements to determine
//whether a swap is necessary
while (sub < maxSub)
{
if (numbers[sub] > numbers[sub + 1])
{
//a swap is necessary
temp = numbers[sub];
numbers[sub] = numbers[sub + 1];
numbers[sub + 1] = temp;
swap = 'Y';
lastSwap = sub;
} //end if
sub += 1; //increment subscript
} //end while
maxSub = lastSwap; //reset maximum subscript
} //end while
//display sorted array
for (int x = 0; x < 4; x += 1)
cout << numbers[x] << endl;
//end for
system("pause");
return 0;
} //end of main function
所以我不明白lastSwap = sub
和maxSub = lastSwap
。它们重要吗?还是我想从代码中删除它们是正确的?
谁能向我解释。
最佳答案
为简单起见,
泡沫排序=>数组中的最大元素的第一遍获得新的适当位置。
第二遍=>数组中的第二个最大元素获得新的适当位置。
。
。
。
第N个传递=>数组中的第N个元素将获得新的适当位置。
变量lastSwap
存储最后一次交换发生的数组的最大索引。
现在,如果对于第一遍,新的合适位置不是数组的最后一个索引,即lastSwap < last index of array
,则意味着索引lastSwap
之后的数组已经排序,因此我们不需要对其进行处理。
每个通行证都遵循此规则,并且通行证总数(maxSub
)的上限设置为lastSwap
,从而减少了通行证的数量。
使用这两行的优点: