http://blog.csdn.net/morewindows/article/details/6657829是必看的
例:長度為N的數組
從0開始進行兩兩左右交換,那麼必然可以把最大數放到最右端。
第二次隻需要從第1個到N-1個進行同樣的操作就可以了。
是以你隻需要開兩層循環:
外層:僅僅記錄下這是第幾次操作,每進行一次操作,我們需要周遊的長度都要減1
内層:進行一個周遊,周遊到N-i即可
代碼1:
- //冒泡排序1
- void BubbleSort1(int a[], int n)
- {
- int i, j;
- for (i = 0; i < n; i++)
- for (j = 1; j < n - i; j++)
- if (a[j - 1] > a[j])
- Swap(a[j - 1], a[j]);
- }
代碼2:
- //冒泡排序2
- void BubbleSort2(int a[], int n)
- {
- int j, k;
- bool flag;
- k = n;
- flag = true;
- while (flag)
- {
- flag = false;
- for (j = 1; j < k; j++)
- if (a[j - 1] > a[j])
- {
- Swap(a[j - 1], a[j]);
- flag = true;
- }
- k--;
- }
- }
假如突然發現某一趟走下來,沒有進行兩兩交換,你懂的。
代碼3:
- //冒泡排序3
- void BubbleSort3(int a[], int n)
- {
- int j, k;
- int flag;
- flag = n;
- while (flag > 0)
- {
- k = flag;
- flag = 0;
- for (j = 1; j < k; j++)
- if (a[j - 1] > a[j])
- {
- Swap(a[j - 1], a[j]);
- flag = j;
- }
- }
- }
這裡更精确了一點,試着去發現尾巴一截的有序,如果發小了,下次你周遊到尾巴前面一點就可以了。