冒泡排序(Bubble_Sort)

来源:互联网 发布:php cookies管理系统 编辑:程序博客网 时间:2024/05/18 00:10

冒泡排序算法是一个耳熟能详的算法,在我们学习计算机的专业课的时候,在课本中经常会见到该程序,作为一个非常简单的例子程序。如果你不能默写该算法,那么你就没学过计算机的相关课程。好了,不说闲话了。

冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。

//冒泡排序(小数上升,大数下沉)#include<stdio.h>typedef int Status;#define TRUE 1#define FALSE 0//将a中整数序列重新排列成自小到大的有序的整数序列void bubble_sort(int a[],int n){int i,j,t;<span style="color:#ff0000;">Status change;</span>for(i=n-1,change=TRUE;i>=1 && change;--i)//外循环{<span style="color:#ff0000;">change=FALSE;//设置change的作用是,当该序列提前有序的时候,就不用再往下进行比较了,该序列已经是有序的了</span>for(j=0;j<i;j++)//内层循环{if(a[j] > a[j+1]) //前一个比后一个大,要往后移动{t=a[j];a[j]=a[j+1];a[j+1]=t;<span style="color:#ff0000;">change=TRUE;//当一趟比较之后,如果有元素的交换就把change设置为TRUE</span>}}}}//打印整数序列void print(int r[],int n){int i;for(i=0;i<n;i++){printf("%d ",r[i]);}printf("\n");}#define N 8void main(){int d[N]={49,38,65,97,76,12,27,49};printf("排序前:\n");print(d,N);bubble_sort(d,N);printf("排序后:\n");print(d,N);}

(1)注意看该程序,有一点小小的优化,就是添加了一个标志change,就是在内层的循环一趟比较之后,如果没有发生元素的交换就说明该序列已经是有序的了,就没有必要再进行外层循环了。

(2)冒泡排序原理图:

(3)程序运行结果:


0 0
原创粉丝点击