1、思路
每次都是相邻两个数之间进行比较;
每轮比较之后总是把最大的数或者最小的数筛选出来。
2、源码
#include <memory> void BubbleSort(int szArray[], int nLen); void main() { int szArray[] = {6,4,8,1,9,13}; BubbleSort(szArray, _countof(szArray)); getchar(); } void BubbleSort(int szArray[], int nLen) { int nTmp = 0; for (int j = 0; j < nLen - 1; j++) { for (int i = 0; i < nLen - j - 2; i++) { if (szArray[i] > szArray[i + 1]) { nTmp = szArray[i + 1]; szArray[i + 1] = szArray[i]; szArray[i] = nTmp; } } } printf("Sorted:"); for (int i = 0; i < nLen; i++) { printf(" %d ", szArray[i]); } printf(" "); }
3、优化
如果发现某一次循环已经全部有序了,那么就不再继续循环。
void OptBubbleSort(int szArray[], int nLen) { int nTmp = 0; int nTmpLen = nLen; BOOL bSorted = FALSE; while (!bSorted) { bSorted = TRUE; for (int i = 0; i < nTmpLen - 2; i++) { if (szArray[i] > szArray[i + 1]) { nTmp = szArray[i + 1]; szArray[i + 1] = szArray[i]; szArray[i] = nTmp; bSorted = FALSE; } } nTmpLen--; } printf("Sorted:"); for (int i = 0; i < nLen; i++) { printf(" %d ", szArray[i]); } printf(" "); }
3、时间复杂度分析
最理想状态下是O(n),平均状态下是O(n^2)