算法概述:
①它重复地走访过要排序的元素,依次比较相邻两个元素。
②如果大小顺序错误就将它们调换,直到没有元素再需要交换,排序完成。
该算法的名字是因为越小(或越大)的元素会经由交换慢慢“浮”到数列的顶端。
算法实现:
①比较相邻两个元素,若是前一个比后一个大,就将其调换位置。
②每一对相邻元素重复①
③重复对剩下的元素重复上面的步骤,知道没有元素需要比较。
C语言实现:
#include<stdio.h>
//交换两元素位置
void Swap(int a[],int i,int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void BubSort(int a[],int n)
{
int i,j;
for(i = 0;i < n-1;i++)//排序多少趟,n个元素需 n-1 趟
for(j = 0; j < n-1-i;j++)//每趟比较的次数,第i趟需比较n-i趟
{
if(a[j]>a[j+1]) //若为逆序,交换位置
{
Swap(a,j,j+1);
}
}
}
int main()
{
int i;
int arr[]={2,5,3,8,6,3,4};
int n = sizeof(arr)/sizeof(int);
BubSort(arr,n);
printf("排序后的顺序是:");
for(i = 0;i < n;i++)
{
printf("%d\t",arr[i]);
}
printf("\n");
return 0;
}
运行结果:
虽然冒泡排序是很容易实现的,但它对于少量元素之外的数列排序效率是比较低的。