冒泡排序

来源:互联网 发布:mac安装hexo 编辑:程序博客网 时间:2024/05/18 07:01

今天学习一下冒泡排序。
冒泡排序是学习计算机的时候,比较简单的一个排序算法,它的过程就是依次的两两比较挨着的元素,如果他们的顺序是错误的,就交换他们的位置,直到把最大(或最小)的元素放在最后一个位置。然后继续重复的再次两两比较,把次大的元素放在倒数第二个位置上,到最后,把所有的元素放在正确的位置上,这就会好像气泡依次往上浮一样。

下面是一个例子。
初始序列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)个了。

0 0
原创粉丝点击