我正在尝试理解代码,究竟是什么
&(ipA[iLower + 1]
代表以下代码(快速排序的分区功能?
void Partition(int* ipA, int iSize) {
// Partitions of size 0 or 1 are already sorted
if (iSize <= 1) {
return;
}
// Select a pivot from the array randomly
int iPivot = ipA[rand() % iSize];
// Indices of the entries to be swapped
int iLower = 0;
int iUpper = iSize - 1;
// Partition array into sections above and below the pivot
while (iLower < iUpper) {
while (ipA[iLower] < iPivot) {
++iLower;
}
while (ipA[iUpper] > iPivot) {
--iUpper;
}
// Swap the entries at the lower and upper indices
int iTemp = ipA[iLower];
ipA[iLower] = ipA[iUpper];
ipA[iUpper] = iTemp;
}
// Recursively call partition on each partititon.
Partition(ipA, iLower);
Partition(&(ipA[iLower + 1]), iSize - iUpper - 1);
}
答案 0 :(得分:2)
每次传递的数组从当前数组的开头分割为两个数组,从iLower + 1的索引分割出一个数组时,从分区调用分区方法。
&安培;表示(指针)的地址,因此调用&amp;(ipA [iLower + 1]就像从单元格的地址调用一个新数组(C / C ++中的指针),在索引iLower + 1处输入ipA。
因为在C中传递数组是通过将指针传递给它们的开始来完成的,所以它有效地传递了一个从该地址开始的数组。