温故而知新,原理就不说了,下面是实现的代码片段,整体放在 github 上了。
快排实现:
// 左边比 key 大的要置换到右边,右边比左边小的要置换到左边。
void QuickSort(int szArray[], int iStart, int iEnd) {
if (iStart >= iEnd) {
return;
}
int iHigh = iEnd;
int iLow = iStart;
int iKey = szArray[(unsigned int)(iStart + iEnd) / 2];
while (iLow < iHigh) {
// 左边向右查找,查找比 key 大的数值
while (szArray[iLow] < iKey && iLow < iEnd) {
iLow++;
}
// 右边向左查找,查找比 key 小的数值
while (szArray[iHigh] > iKey && iHigh > iStart) {
iHigh--;
}
if (iLow <= iHigh) {
int iTemp = szArray[iLow];
szArray[iLow] = szArray[iHigh];
szArray[iHigh] = iTemp;
iLow++;
iHigh--;
}
}
QuickSort(szArray, iStart, iHigh);
QuickSort(szArray, iLow, iEnd);
}
二分法查询实现:
int BinarySearch(int szArray[], int iSize, int iFindValue) {
int iLeft = 0;
int iRight = iSize - 1;
while (iLeft <= iRight) {
int iMid = ((unsigned int)(iLeft + iRight)) / 2; //int + int maybe < 0.
if (iFindValue > szArray[iMid]) {
iLeft = iMid + 1;
} else if (iFindValue < szArray[iMid]) {
iRight = iMid - 1;
} else {
return iMid;
}
}
return -1;
}