從上一篇的博文中,我們可以看到,對于第四遍遍歷的時候,已經(jīng)排序完成,沒有發(fā)生任何交換,這對于算法來說,是可以避免的。可以優(yōu)化的。今天我們來詳細(xì)說一下,如何來優(yōu)化。
優(yōu)化冒泡排序
我們是否可以設(shè)想,在執(zhí)行下一邊排序的時候,我們先判斷一下,上一遍排序是否發(fā)生交換,如果發(fā)生交換,就繼續(xù)執(zhí)行下一遍的遍歷,如果沒有發(fā)生交換,我們就可以認(rèn)為,這個無序數(shù)組已經(jīng)排序完成,這個時候我們就可以結(jié)束程序了。
代碼實現(xiàn)
void BubbleSort(int* pDataArray, int iDataNum)
{
BOOL flag = FALSE;//記錄是否存在交換
for (int i = 0; i < iDataNum - 1; i++)//走iDataNum-1趟
{
flag = FALSE;
for (int j = 0; j < iDataNum - i - 1; j++)
if (pDataArray[j] > pDataArray[j + 1])
{
flag = TRUE;
DataSwap(&pDataArray[j], &pDataArray[j + 1]);
}
if (!flag)//上一趟比較中不存在交換,則退出排序
break;
}
}
冒泡排序的時間復(fù)雜度為O(N^2)