今天学习一下冒泡排序。
冒泡排序是学习计算机的时候,比较简单的一个排序算法,它的过程就是依次的两两比较挨着的元素,如果他们的顺序是错误的,就交换他们的位置,直到把最大(或最小)的元素放在最后一个位置。然后继续重复的再次两两比较,把次大的元素放在倒数第二个位置上,到最后,把所有的元素放在正确的位置上,这就会好像气泡依次往上浮一样。
下面是一个例子。
初始序列A[5]={【4】,2,0,3,1}
第一次:比较A【0】=4 与A【1】=2, 这时4>2,顺序错误,交换A【0】与A【1】的位置如下所示:
A【5】={2,【4】,0,3,1}
第二次:比较A【1】=4与A【2】=0,这时4>2,顺序错误,交换A【1】与A【2】的位置如下所示:
A【5】={2,0,【4】,3,1}
第三次:比较A【2】=4与A【3】=3,这时4>3,顺序错误,交换A【2】与A【3】的位置如下所示:
A【5】={2,0,3,【4】,1}
第四次:比较A【3】=4与A【4】=1,这时4>1,顺序错误,交换A【3】与A【4】的位置如下所示:
A【5】={2,0,3,1【4】}
此时数组中最大的元素4就放在了数组最后的位置上,然后就是重复上述过程:
放置次大元素:
A【5】={0,【2】,3,1,4}
A【5】={0,2,【3】,1,4}
A【5】={0,2,1,【3】,4}
放置第三大元素:
A【5】={0,2,13,4}
A【5】={0,【2】,1,3,4}
A【5】={0,1,【2】,3,4}
.
.
.
最后
A【5】={0,1,2,3,4}
最后写一段测试代码:
#include<stdio.h>
void bubble_sort(int A[],int size);//冒泡排序函数声明
int main()
{
int a[13]={3,2,4,0,1,9,6,12,5,7,34,22,11};//初始序列
bubble_sort(a,13);//调用冒泡排序
int j=0;
while(j<13)//输出排好序的数组
{
printf("%d\n",a[j]);
j++;
}
return 0;
}
void bubble_sort(int A[],int size)//冒泡排序
{
int i,j;
for(i =0;i<size-1;i++)//控制要排第几个元素 为什么是size-1?
{
for(j=0;j<size-i-1;j++)//控制两两交换 为什么是(size-i-1)?
{
if(A[j]>A[j+1])//如果A[j]>A[j+1],交换两者位置
{
int temp;
temp = A[j];
A[j]=A[j+1];
A[j+1]=temp;
}
}
}
}
为什么是(size-1)而不是size?因为虽然有size个元素要排序,但是如果(size-1)个元素已经排好了,那么第size个元素也就确定了,所以只要排好前(size-1)个就好了
为什么是(size-i-1),因为,如果已经有3(假设)个元素放在了正确的位置上,实际下次要排序的元素就是(size-3-1)个了。