八种基本排序问题 (第一篇 冒泡法排序)图文详解

一 . 冒泡法的描述

冒泡排序(Bubble Sort),是一种 计算机科学 领域的较简单的 排序算法 。 它重复地走访过要排序的元素列,依次比较两个相邻的 元素 ,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。. 走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

假如我们要把 12、35、99、18、76 这 5 个数从大到小进行排序,那么数越大,越需要把它放在前面。冒泡排序的思想就是在每次遍历一遍未排序的数列之后,将一个数据元素浮上去(也就是排好了一个数据)。
我们从后开始遍历,首先比较 18 和 76,发现 76 比 18 大,就把两个数交换顺序,得到 12、35、99、76、18;接着比较 76 和 99,发现 76 比 99 小,所以不用交换顺序;接着比较 99 和 35,发现 99 比 35 大,交换顺序;接着比较 99 和 12,发现 99 比 12 大,交换顺序。最终第 1 趟排序的结果变成了 99、12、35、76、18,排序的过程如 1 所示。


图 1 第 1 趟冒泡排序的过程示例


经过第 1 趟排序,我们已经找到了最大的元素,接下来的第 2 趟排序就只对剩下的 4 个元素排序。第 2 趟排序的过程示例如图 2 所示。

二. 排序步骤  

    1.一共进行数组的大小 -1 次大的排序

    2.大循环每一趟嵌套的循环经行  数组大小 减去第几趟排序

    3.如果在某趟排序中 没有发生交换 可以设置变量 提前结束;   

三 . 代码实现


  
  
  1. package c06Sort;
  2. import java.util.Arrays;
  3. public class BubbleSort {
  4. public static void main (String[] args) {
  5. //测试时只需要改变这里传入的数组数据
  6. int arr[] = { 33, 5, 2, 9, 1, 3};
  7. System.out.println( "排序前的数组");
  8. System.out.println(Arrays.toString(arr));
  9. Bubble(arr);
  10. System.out.println( "\n排序hou的数组");
  11. System.out.println(Arrays.toString(arr));
  12. }
  13. //冒泡排序的算法
  14. public static void Bubble (int[] arr) {
  15. int temp = 0;
  16. boolean flag = false; // 表示没有交换过
  17. for ( int i = 0; i < arr.length - 1; i++) {
  18. // 没趟排序
  19. for ( int j = 0; j < arr.length - 1 - i; j++) {
  20. if (arr[j] > arr[j + 1]) {
  21. flag = true;
  22. temp = arr[j];
  23. arr[j] = arr[j + 1];
  24. arr[j + 1] = temp;
  25. }
  26. }
  27. // 每趟之后
  28. if (!flag) { //
  29. break;
  30. } else {
  31. flag = false;
  32. // 要重新赋值 ,不然下次不能排序了
  33. }
  34. System.out.println( "\n第" + (i + 1) + "趟排序");
  35. System.out.println(Arrays.toString(arr));
  36. }
  37. }
  38. }

四. 运行结果

 这里有设置变量 所以只要在某一次没做交换就是有序了,直接跳出循环,节省时间 

  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值