冒泡排序(bubble sort)是最为常用的一种排序方法。它是一类具有“交换”性质的排序方法。
冒泡排序的基本思想是:
将序列中的第1个元素与第2个元素进行比较,若前者大于后者,则将第1个元素与第2个元素进行位置交换,否则不交换。
再将第2个元素与第3个元素进行比较,同样若前者大于后者,则将第2个元素与第3个元素进行位置交换,否则不交换。
依此类推,直到将第n-1个元素与第n个元素进行比较为止。
这个过程称为第1趟冒泡排序。经过第1趟冒泡排序后,将长度为n的序列中最大的元素置于序列的尾部,即第n个位置上。
然后再对剩下的n-1个元素做同样的操作,这叫做第2趟冒泡排序。经过第2趟的排序,将剩下的n-1个元素中最大的元素置于序列的n-1的位置上。
如此下去,当执行完第n-1趟的冒泡排序后,就可以将序列中剩下2个元素中的最大的元素位置置于序列的第2位置上。第1个位置上的元素就是该序列中最小的元素。
下面通一个例子来介绍选择排序的执行过程。
数据元素序列{3, 6, 4, 2, 11, 10, 6}
第一趟:{3, 4, 2, 6, 10, 6, 11}//比较6次
第二趟:{3, 2, 4, 6, 6, 10, 11}//比较5次
第三趟:{2, 3, 4, 6, 6, 10, 11}//比较4次
第四趟:{2, 3, 4, 6, 6, 10, 11}//比较3次
第五趟:{2, 3, 4, 6, 6, 10, 11}//比较2次
第六趟:{2, 3, 4, 6, 6, 10, 11}//比较1次
算法描述:
void bubblesort(keytype k[], int n)
{
int i, j;
keytype temp;
for(i=0; i<n; i++)
{
for(j=0; j<n-i-1; j++)
{
if(k[j] > k[j+1])
{
temp = k[j];
k[j] = k[j+1];
k[j+1] = k[j];
}
}
}
}
实例:
#include <stdio.h>
#include <stdlib.h>
void bubblesort(int a[], int n)
{
int i,j,temp;
for(i=0; i<n; i++)
{
for(j=0; j<n-i-1; j++)
{
if(a[j] < a[j+1])
{
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
}
}
void main
{
int i;
int a[10] = {2, 5, 6, 3, 7, 8, 0, 9, 12, 1};
printf("The orginal data array is\n");
for(i = 0; i <10; i++)
{
printf("%d ",a[i]);
}
bubblesort(a, 10);
printf("\nThe result of insertion sorting for the arrray is\n");
for(i = 0; i<10; i++)
{
printf("%d ", a[i]);
}
printf("\n");
system("pause");
}