数据结构之排序_1

来源:互联网 发布:企业成本核算软件 编辑:程序博客网 时间:2024/05/17 09:20

一、冒泡排序法

        用通俗的话来阐述一下基本思想: 

        第一趟从数组的第一个元素开始到第n个元素为止,对n-1对相邻的两个记录进行两两比较,如果前者比后者大,则两者交换。这样,经过一趟的比较、交换后,最大的元素就移到了第n个位置。

        第二趟从第一个元素开始到第n-1个元素为止,经过同样的比较交换使次大的元素移到第n-1个位置。

        .............

        如此重复,从第一个元素到最后一个元素就从小打大地排列了。

        之所以叫冒泡排序,是假设最大的元素像最轻的气泡一样,最先浮上来(到达第n个位置),较重的气泡后些冒上来。。。

         判断排序过程结束标志:一次交换都没有发生。

        大致代码如下:

/*                   冒泡排序法                             */#include<stdio.h>void bubblesort(int a[],int n);          //声明函数 int main(){int a[10]={12,89,45,67,49,53,84,11,97,5};bubblesort(a,10);return 0;} void bubblesort(int a[],int n) /*a[n]是一个包含n个无序元素的整型数组 */{int i,j,flag,temp,count=0;     //flag=0表示没有发生交换,用于判断整个数组是否已经有序//count用来计算总共的趟数 for(i=0;i<n-1;i++)   //进行n-1趟排序{flag=0;       //先假设没有发生交换for(j=0;j<n-1-i;j++){if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;flag=1;     //因为发生了一次交换所以置flag=1; }} /***********为了显示每趟结束之后的排序情况***************/count++;printf("第%d趟: ",count); for(j=0;j<n;j++){printf("%3d",a[j]);}if(flag)    printf("\n"); /*******************************************************/if(!flag)    break;        //本趟比较中没发生交换则表示排序过程已经结束,即跳出循环。 }}
     以下是程序的执行结果:


end

   

1 0
原创粉丝点击