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;
- }
- }
- }