首页 > 代码库 > 排序算法-----冒泡排序
排序算法-----冒泡排序
排序算法------冒泡排序BubbleSort
冒泡排序是最基本的排序方法,它是通过大数沉淀的方式,没经过一轮排序,整个序列中的最大的数都会放置在最后,【冒泡是对于这个数最终在序列的最后出现的形象化的描述】,然后因为这个数已经排列完,所以不再考虑,然后对前面的所有数再次大数沉淀,以此类推,直到所有的序列都已经排好为止。
具体的案例描述:
4,8,3,2,1,9,6,7,5
过程如下:
(1)第一轮循环<i=0>:
首先数j:4和j+1:8比较,4<8,大数在后,不动,j++;
4,8,3,2,1,9,6,7,5 --------------- 结果 4,8,3,2,1,9,6,7,5
j j+1
然后j:8和j+1:3比较,8>3,大数在前,交换两个数,j++;
4,8,3,2,1,9,6,7,5 --------------- 结果 4,3,8,2,1,9,6,7,5
j j+1
然后j:8和j+1:2比较,8>2,大数在前,交换两个数,j++;
4,3,8,2,1,9,6,7,5 --------------- 结果 4,3,2,8,1,9,6,7,5
j j+1
然后j:8和j+1:1比较,8>1,大数在前,交换两个数,j++;
4,3,2,8,1,9,6,7,5 --------------- 结果 4,3,2,1,8,9,6,7,5
j j+1
然后j:8和j+1:9比较,8<9,大数在后,不动,j++;
4,3,2,1,8,9,6,7,5 --------------- 结果 4,3,2,1,8,9,6,7,5
j j+1
然后j:9和j+1:6比较,9>6,大数在前,交换两个数,j++;
4,3,2,1,8,9,6,7,5 --------------- 结果 4,3,2,1,8,6,9,7,5
j j+1
然后j:9和j+1:7比较,9>7,大数在前,交换两个数,j++;
4,3,2,1,8,6,9,7,5 --------------- 结果 4,3,2,1,8,6,7,9,5
j j+1
然后j:9和j+1:5比较,9>5,大数在前,交换两个数,j++;
4,3,2,1,8,6,7,9,5 --------------- 结果 4,3,2,1,8,6,7,5,9
j j+1
到这里第一轮排序完成,我们看到最大的数已经在序列的最后了,由此进入第二轮循环(注意:j<9-1-0=n-1-i;)
(2)第二轮循环<i=1>:
j从头开始,首先数j:4和j+1:3比较,4>3,大数在前,交换两个数,j++;
4,3,2,1,8,6,7,5,9 --------------- 结果 3,4,2,1,8,6,7,5,9
j j+1
重复循环一中的步骤直到:
3,2,1,4,6,7,8,5,9 --------------- 结果 3,2,1,4,6,7,5,8,9
j j+1
到这里第二轮排序完成,我们看到最大的数已经在序列的最后了,由此进入第三轮循环
我们能发现j的数值比前一轮小一,是因为最后一个数字已经排好 j<9-1-1=n-1-i;
(3)第三轮循环<i=2>:
结果:2,1,3,4,6,5,7,8,9
(4)第四轮循环<i=3>:
结果:1,2,3,4,5,6,7,8,9
(4)第五轮循环<i=4>:
结果:1,2,3,4,5,6,7,8,9
(4)第六轮循环<i=5>:
结果:1,2,3,4,5,6,7,8,9
(4)第七轮循环<i=6>:
结果:1,2,3,4,5,6,7,8,9
(4)第八轮循环<i=7>:
结果:1,2,3,4,5,6,7,8,9
写到这里整个冒泡排序结束
假设有n个元素的序列需要进行冒泡排序,用数组表示a[n]={4,8,3,2,1,9,6,7,5};
这里我们只需要两层循环,一层用来控制第几次循环(即i),i<n-1;
第二层用来控制比较的位置(即j),j<n-1-i
下面给出代码:
1 #include <stdio.h> 2 int main() { 3 int a[9] = { 3,4,9,8,1,2,5,7,6 }; 4 for (int m = 0; m<9; m++) 5 { 6 if (m != 8) { 7 printf("%d,", a[m]); 8 } 9 else { 10 printf("%d", a[m]); 11 } 12 } 13 printf("\n"); 14 for (int i = 0; i <9 - 1; i++) 15 for (int j = 0; j<9 - 1 - i; j++) 16 { 17 if (a[j]>a[j + 1]) { 18 int temp; 19 temp = a[j]; 20 a[j] = a[j + 1]; 21 a[j + 1] = temp; 22 23 } 24 } 25 for (int m = 0; m<9; m++) 26 { 27 if(m!=8){ 28 printf("%d,", a[m]); 29 } 30 else { 31 printf("%d", a[m]); 32 } 33 34 } 35 getchar(); 36 }
排序算法-----冒泡排序