冒泡排序法---排序算法(三)
1.排序原理
每次交换将最大的移到顶端,将像是水泡一样往上冒,所以将冒泡排序
例如:7 6 5 4 3 2 1
第一次 7>6所以交换7和6得6 7 5 4 3 2 1
第二次 7>5所以交换7和5得6 5 7 4 3 2 1
第三次 7>4所以交换7和4得6 5 4 7 3 2 1
第四次 7>3所以交换7和3得6 5 4 3 7 2 1
第五次 7>2所以交换7和2得6 5 4 3 2 7 1
第六次 7>1所以交换7和1得6 5 4 3 2 1 7
以上为一次冒泡排序,将最大的7冒泡到顶端
然后再对 6 5 4 3 2 1进行第二次冒泡排序 得5 4 3 2 1 6
然后再对 5 4 3 2 1进行第三次冒泡排序行4 3 2 1 5
然后 再对4 3 2 1进行第四次冒泡排序行3 2 1 4
然后再对3 2 1 进行第五次冒泡排序得2 1 3
最后对2 1 进行第六次冒泡排序得1 2
整个排序结果得:1 2 3 4 5 6 7
2.排序代码
#include <stdio.h> void printArray(int a[],int size){ printf("数组为:[%d] ",a[0]); for (int i=1;i<size;i++) { printf(" %d ",a[i]); } printf("\n"); } void main() { //a[0]为监视哨 int a[8]={0,7,6,5,4,3,2,1}; int len=8; for (int i=1;i<len;i++) { for (int j=2;j<=len-i;j++) { printf(" i=%d j=%d ",i,j); if (a[j-1]>a[j]) { printf("[%d]交换[%d]",a[j-1],a[j]); a[0]=a[j]; a[j]=a[j-1]; a[j-1]=a[0]; } printArray(a,len); } } printArray(a,len); }
3.排序结果
i=1 j=2 [7]交换[6]数组为:[6] 6 7 5 4 3 2 1 i=1 j=3 [7]交换[5]数组为:[5] 6 5 7 4 3 2 1 i=1 j=4 [7]交换[4]数组为:[4] 6 5 4 7 3 2 1 i=1 j=5 [7]交换[3]数组为:[3] 6 5 4 3 7 2 1 i=1 j=6 [7]交换[2]数组为:[2] 6 5 4 3 2 7 1 i=1 j=7 [7]交换[1]数组为:[1] 6 5 4 3 2 1 7 i=2 j=2 [6]交换[5]数组为:[5] 5 6 4 3 2 1 7 i=2 j=3 [6]交换[4]数组为:[4] 5 4 6 3 2 1 7 i=2 j=4 [6]交换[3]数组为:[3] 5 4 3 6 2 1 7 i=2 j=5 [6]交换[2]数组为:[2] 5 4 3 2 6 1 7 i=2 j=6 [6]交换[1]数组为:[1] 5 4 3 2 1 6 7 i=3 j=2 [5]交换[4]数组为:[4] 4 5 3 2 1 6 7 i=3 j=3 [5]交换[3]数组为:[3] 4 3 5 2 1 6 7 i=3 j=4 [5]交换[2]数组为:[2] 4 3 2 5 1 6 7 i=3 j=5 [5]交换[1]数组为:[1] 4 3 2 1 5 6 7 i=4 j=2 [4]交换[3]数组为:[3] 3 4 2 1 5 6 7 i=4 j=3 [4]交换[2]数组为:[2] 3 2 4 1 5 6 7 i=4 j=4 [4]交换[1]数组为:[1] 3 2 1 4 5 6 7 i=5 j=2 [3]交换[2]数组为:[2] 2 3 1 4 5 6 7 i=5 j=3 [3]交换[1]数组为:[1] 2 1 3 4 5 6 7 i=6 j=2 [2]交换[1]数组为:[1] 1 2 3 4 5 6 7 数组为:[1] 1 2 3 4 5 6 7