從上一篇的博文中,我們可以看到,對于第四遍遍歷的時候,已經排序完成,沒有發生任何交換,這對于算法來說,是可以避免的。可以優化的。今天我們來詳細說一下,如何來優化。
優化冒泡排序
我們是否可以設想,在執行下一邊排序的時候,我們先判斷一下,上一遍排序是否發生交換,如果發生交換,就繼續執行下一遍的遍歷,如果沒有發生交換,我們就可以認為,這個無序數組已經排序完成,這個時候我們就可以結束程序了。
代碼實現
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;
}
}
冒泡排序的時間復雜度為O(N^2)