冒泡排序法(Bubble Sorting)

来源:互联网 发布:mix2 知乎 编辑:程序博客网 时间:2024/06/06 03:45

冒泡排序法(Bubble Sorting)是一种交换排序方法

基本思想:
每次仅进行相邻两个元素的比较,若为逆序(a(i)>a(i+1)),则将两个元素交换。

排序过程:
先将第一个元素和第二个元素进行比较,若为逆序,则交换之;接着比较第二个和第三个元素;依此类推,直到第n-1个元素和第n个元素进行比较、交换为止。如此经过一趟排序,使最大的元素被安置到最后一个元素的位置上。然后,对前n-1个元素进行同样的操作,使次大的元素被安置到第n-1个元素的位置上。重复以上过程,直到没有元素需要交换为止。

举例说明:

原始待排序数组【7 | 3 | 1 | 2 | 6 | 0】

从小到大排序

第一趟排序(外循环)
第一次两两比较 7>3 交换(内循环)
交换前状态【7 | 3】| 1 | 2 | 6 | 0 |
交换后状态【3 | 7】| 1 | 2 | 6 | 0 |

第二次两两比较 7>1 交换(内循环)
交换前状态 | 3 |【7 | 1】| 2 | 6 | 0 |
交换后状态 | 3 |【1 | 7】| 2 | 6 | 0 |

第三次两两比较 7>2 交换(内循环)
交换前状态 | 3 | 1 |【7 | 2】| 6 | 0 |
交换后状态 | 3 | 1 |【2 | 7】| 6 | 0 |

第四次两两比较 7>6 交换(内循环)
交换前状态 | 3 | 1 | 2 |【7 | 6】| 0 |
交换后状态 | 3 | 1 | 2 |【6 | 7】| 0 |

第五次两两比较 7>0 交换(内循环)
交换前状态 | 3 | 1 | 2 | 6 |【7 | 0】
交换后状态 | 3 | 1 | 2 | 6 |【0 | 7】

第二趟排序(外循环)
第一次两两比较 3>1 交换(内循环)
交换前状态【3 | 1】| 2 | 6 | 0 | 7 |
交换后状态【1 | 3】| 2 | 6 | 0 | 7 |

第二次两两比较 3>2 交换(内循环)
交换前状态 | 1 |【3 | 2】| 6 | 0 | 7 |
交换后状态 | 1 |【2 | 3】| 6 | 0 | 7 |

第三次两两比较 3<6 不交换(内循环)
交换前状态 | 1 | 2 |【3 | 6】| 0 | 7 |
交换后状态 | 1 | 2 |【3 | 6】| 0 | 7 |

第四次两两比较 6>0 交换(内循环)
交换前状态 | 1 | 2 | 3 |【6 | 0】| 7 |
交换后状态 | 1 | 2 | 3 |【0 | 6】| 7 |

第五次两两比较 6<7 不交换(内循环)
交换前状态 | 1 | 2 | 3 | 0 |【6 | 7】
交换后状态 | 1 | 2 | 3 | 0 |【6 | 7】

第三趟排序(外循环)
第一次两两比较 1<2 不交换(内循环)
交换前状态【1 | 2】| 3 | 0 | 6 | 7 |
交换后状态【1 | 2】| 3 | 0 | 6 | 7 |

第二次两两比较 2<3 不交换(内循环)
交换前状态 | 1 |【2 | 3】| 0 | 6 | 7 |
交换后状态 | 1 |【2 | 3】| 0 | 6 | 7 |

第三次两两比较 3>0 交换(内循环)
交换前状态 | 1 | 2 |【3 | 0】| 6 | 7 |
交换后状态 | 1 | 2 |【0 | 3】| 6 | 7 |

第四次两两比较 3<6 不交换(内循环)
交换前状态 | 1 | 2 | 0 |【3 | 6】| 7 |
交换后状态 | 1 | 2 | 0 |【3 | 6】| 7 |

第五次两两比较 6<7 不交换(内循环)
交换前状态 | 1 | 2 | 0 | 3 |【6 | 7】
交换后状态 | 1 | 2 | 0 | 3 |【6 | 7】

第四趟排序
第一次两两比较 1<2 不交换(内循环)
交换前状态【1 | 2】| 0 | 3 | 6 | 7 |
交换后状态【1 | 2】| 0 | 3 | 6 | 7 |

第二次两两比较 2>0 交换(内循环)
交换前状态 | 1 |【2 | 0】| 3 | 6 | 7 |
交换后状态 | 1 |【0 | 2】| 3 | 6 | 7 |

第三次两两比较 2<3 不交换(内循环)
交换前状态 | 1 | 0 |【2 | 3】| 6 | 7 |
交换后状态 | 1 | 0 |【2 | 3】| 6 | 7 |

第四次两两比较 3<6 不交换(内循环)
交换前状态 | 1 | 0 | 2 |【3 | 6】| 7 |
交换后状态 | 1 | 0 | 2 |【3 | 6】| 7 |

第五次两两比较 6<7 不交换(内循环)
交换前状态 | 1 | 0 | 2 | 3 |【6 | 7】
交换后状态 | 1 | 0 | 2 | 3 |【6 | 7】

第五趟排序
第一次两两比较 1>0 交换(内循环)
交换前状态【1 | 0】| 2 | 3 | 6 | 7 |
交换后状态【0 | 1】| 2 | 3 | 6 | 7 |

第二次两两比较 1<2 不交换(内循环)
交换前状态 | 0 |【1 | 2】| 3 | 6 | 7 |
交换后状态 | 0 |【1 | 2】| 3 | 6 | 7 |

第三次两两比较 2<3 不交换(内循环)
交换前状态 | 0 | 1 |【2 | 3】| 6 | 7 |
交换后状态 | 0 | 1 |【2 | 3】| 6 | 7 |

第四次两两比较 3<6 不交换(内循环)
交换前状态 | 0 | 1 | 2 |【3 | 6】| 7 |
交换后状态 | 0 | 1 | 2 |【3 | 6】| 7 |

第五次两两比较 6<7 不交换(内循环)
交换前状态 | 0 | 1 | 2 | 3 |【6 | 7】
交换后状态 | 0 | 1 | 2 | 3 |【6 | 7】

以上就是数组【7 | 3 | 1 | 2 | 6 | 0】冒泡排序的全过程

排序完毕,输出最终结果 【0 | 1 | 2 | 3 | 6 | 7】

代码仅供参考:

这里写图片描述

核心代码:
这里写图片描述

原创粉丝点击