排序算法-----冒泡排序

排序算法------冒泡排序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 }

 

 

转载于:https://www.cnblogs.com/waws520/p/7324471.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值