首先将R 0 与R 1 的关键字进行比较,若R 0 >R 1 ,则交换R 0 与R 1 的位置,否则不交换。再将R 1 与R 2 的关键字进行比较,若R 1 >R 2 ,则交换R 1 与R 2 的位置,否则不交换。依次类推,直到R n-2 与R n-1 的关键字进行比较、交换后为止。经过这一趟排序,使得关键字最大的记录被安置在的关键字进行比较、交换后为止。然后,对前n-1 个记录进行同样的操作,直到进行了n-1 趟或已没有记录需要交换为止。
2.举例:
初值:[44 55 22 33 99 11 66 77]
第一趟排序之后:[44 22 33 55 11 66 77] 99
第二趟排序之后:[22 33 44 11 55 66] 77 99
第三趟排序之后:[22 33 11 44 55] 66 77 99
第四趟排序之后:[22 11 33 44] 55 66 77 99
第五趟排序之后:[11 22 33] 44 55 66 77 99
第六趟排序之后:[11 22] 33 44 55 66 77 99
3.算法
<span style="font-family:Microsoft YaHei;font-size:14px;">public void BubbleSort(int a[], int n)
/* 用冒泡排序法对a[0]~a[n-1] 排序 */
{
int i, j, flag = 1;
int temp;
for (i = 1; i < n && flag == 1; i++) {
flag = 0;
for (j = 0; j < n - i; j++)
if (a[j] > a[j + 1]) {
flag = 1;
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}</span>
4.算法分析
(1)比较次数
外循环:
最好要执行1 次,∴ 最小比较次数为:n-1
最坏要执行n-1次, ∴ 最大比较次数为:n^2 / 2;
(2)移动次数
最小:0
最大:每次比较都移动3次,比较次数为n(n-1)/2;
∴ 最大移动量为3n(n-1) / 2
∴ 总的时间复杂度 为O(n ^2) 。