void Bubble(int a[],int n) { int i,j; for (i=0;i<=n-2;i++){ for (j=0;j<=n-2-i;j++){ if (a[j+1]<a[j]){ swap(a[j+1],a[j]); } } } for (i=0;i<=n-1;i++){ printf("%3d",a[i]); } printf("\n"); }
#include "stdio.h" #include "stdlib.h" void swap(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } void SelectSort(int a[],int n) { int i,j,min; for (i=0;i<n;i++){ min=i; for (j=i+1;j<=n-1;j++){ if (a[min]>a[j]) min=j; } if (min!=i) swap(&a[min],&a[i]); } } void BubbleSort1(int a[],int n) { //两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。 int i,j; for (i=0;i<n;i++){ for (j=i+1;j<=n-1;j++){ if (a[i]>a[j]) swap(&a[i],&a[j]); } } } void BubbleSort2(int a[],int n) { //冒泡算法的进一步优化,使用一个标志位来记录是 //否有数据的交换,如果数据有交换,则将标志flag赋值为true int i,j; for (i=0;i<n;i++){ for (j=n-2;j>=i;j--){ if (a[j]>a[j+1]) swap(&a[j],&a[j+1]); } } } void BubbleSort3(int a[],int n) { int i,j; int flag=1; for (i=0;i<n&&flag;i++){ flag=0; for (j=n-2;j>=i;j--){ if (a[j]>a[j+1]){ swap(&a[j],&a[j+1]); flag=1; } } } } void Print(int a[],int n) { int i; for (i=0;i<=n-1;i++){ printf("%d ",a[i]); } printf("\n\n\n"); } int main() { int a[10]={1,8,5,7,9,2,3,6,4,11}; BubbleSort3(a,10); Print(a,10); return 0; }
上面的程序还不如这个版本:
void Bubble(int a[],int n) { int i,j; for (i=0;i<=n-2;i++){ for (j=0;j<=n-2-i;j++){ if (a[j+1]<a[j]){ swap(a[j+1],a[j]); } } } for (i=0;i<=n-1;i++){ printf("%3d",a[i]); } printf("\n"); }