31排序算法之冒泡排序
排序算法之冒泡排序
原理:反复扫描数组a,比较相邻元素a[i]与a[i+1]。
若逆序(a[i]>a[i+1])就交换
自上而下地扫描的下降法
最大元素下降到底部
自下而上地扫描的上升法
最小元素上升到数组顶部
上升法图例:
简单的冒泡排序算法(上升法)
void bubble_sort(int a[ ],int n)
{ int i,j,x;
1. for(j=0;j<n-1; j++) // j是本遍扫描终点下标
2. for(i=n-2;i>=j; i - - )
3. if(a[i]>a[i+1]) //逆序
4. { x=a[i]; a[i]=a[i+1]; a[i+1]=x; }
}
带交换否标记的汽泡排序算法(下降法)
void bubble_sort_2(int a[ ],int n)
{ int i,j,x,flag=1;
1. j=n-2;
2. while(flag)
3. { flag=0;
4. for(i=0;i<=j;i++) if(a[i]>a[i+1])
5. { x=a[i]; a[i]=a[i+1]; a[i+1]=x; flag=1; }
6. j- - ;
}
}
冒泡排序源代码: //1冒泡排序(大数值沉淀在最后) void BubbleSort(int *arr,int num) { int i,j;//循环变量 int count;//判断是否交换 for(i=0;i<num-1;++i)//比较趟数 { count=0; for(j=0;j<num-1-i;++j)//每一趟比较的次数 { if(arr[j]>arr[j+1]) { int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; count++; }; }; if(count==0) break; }; }; int main() { int arr[10]={3,5,8,2,4,13,9,1,16,7}; BbbleSort(arr,10); for(int i=0;i<10;++i) printf("%d ",arr[i]); getchar(); return 0; }