黑马程序员技术交流社区

标题: [冒泡排序]经典实现方法 [打印本页]

作者: 可以假装看不见    时间: 2016-5-26 21:47
标题: [冒泡排序]经典实现方法
  1. /*
  2. * 冒泡排序分析 :
  3. * 算法思想:
  4. *         每次相邻的两个进行比较,较大不断后移
  5. *         最终每趟最大的沉底
  6. *         示例 :索引 0 1 2 3 4
  7. *                 i  5 8 9 1 2
  8. *
  9. *                    5 8 9 1 2  5<8  不动       
  10. *         第0趟          5 8 9 1 2  8<9  不动
  11. *         5 8 1 9 2  9>1 交换
  12. *         5 8 1 2 9  9>2 交换  得出最大值为9  arr[4] = 9
  13. *         共比较4次
  14. *  
  15. *  第1趟          5 8 1 2 9  5<8 不动
  16. *         5 1 8 2 9  8>1 交换
  17. *         5 1 2 8 9  8>2 交换  得出8为次大           arr[3] = 8
  18. *         共比较3次
  19. *         
  20. *  第2趟         1 5 2 8 9  5>1 交换
  21. *         1 2 5 8 9  5>2 交换  得出5位第三大         arr[2] = 5
  22. *         共比较2次
  23. *   
  24. *  第3趟       1 2 5 8 9   1<2 不动  得出2是第四大         arr[1] = 2
  25. *         共比较1次                                    剩余元素则为最小    arr[0] = 1
  26. *         
  27. *                                          
  28. *  分析得 外圈总共4次,外圈第0次循环内圈是4次
  29. *                             外圈第1次循环内圈是3次
  30. *                             外圈第2次循环内圈是2次
  31. *                             外圈第3次循环内圈是1次
  32. *  定义外圈变量 x = 0 ;则内圈是从0 - 4 也就是小于5
  33. *                  x = 1 , y 是 0 - 3  也就是小于4 5 - 1
  34. *          x = 2 . y 是 0 - 2 也就是小于3 5 - 2
  35. *          x = 3 . y 是 0 - 1 也就是小于2 5 - 3
  36. *  
  37. */
  38. public class BubbleSort {

  39.         /**
  40.          * @param args
  41.          */
  42.         static int[] arr = {5,8,9,1,2};
  43.         public static void main(String[] args) {

  44.                 sortArr();
  45.                 printArr();
  46.         }

  47.         public  static void printArr() {
  48.                 System.out.print("[");
  49.                 for (int i = 0; i < arr.length; i++) {
  50.                         if(i!=arr.length-1){
  51.                         System.out.print(arr[i]+" ,");
  52.                         }else{
  53.                                 System.out.println(arr[i]+"]");
  54.                         }
  55.                 }
  56.         }

  57.         public static void sortArr() {
  58.                 for (int i = 0; i < arr.length-1; i++) {
  59.                         for (int j = 0; j < arr.length-1-i; j++) {
  60.                                 if(arr[j]>arr[j+1]){
  61.                                         swap(arr,j,j+1);
  62.                                 }
  63.                         }
  64.                 }
  65.         }

  66.         private static void swap(int[] arr, int i, int j) {
  67.                
  68.                 int temp = arr[i];
  69.                 arr[i] = arr[j];
  70.                 arr[j] = temp;
  71.                
  72.         }

  73. }
复制代码

作者: 可以假装看不见    时间: 2016-5-26 21:54
本帖最后由 可以假装看不见 于 2016-5-26 21:56 编辑
  1. /*
  2. * 冒泡排序分析 :
  3. * 算法思想:
  4. *         每次相邻的两个进行比较,较大不断后移
  5. *         最终每趟最大的沉底
  6. *         示例 :索引 0 1 2 3 4
  7. *                i  5 8 9 1 2
  8. *
  9. *              5 8 9 1 2  5<8  不动       
  10. *         第0趟   5 8 9 1 2  8<9  不动
  11. *             5 8 1 9 2  9>1 交换
  12. *             5 8 1 2 9  9>2 交换  得出最大值为9  arr[4] = 9
  13. *              共比较4次
  14. *  
  15. *  第1趟           5 8 1 2 9  5<8 不动
  16. *                     5 1 8 2 9  8>1 交换
  17. *                     5 1 2 8 9  8>2 交换  得出8为次大           arr[3] = 8
  18. *                     共比较3次
  19. *         
  20. *  第2趟          1 5 2 8 9  5>1 交换
  21. *                    1 2 5 8 9  5>2 交换  得出5位第三大         arr[2] = 5
  22. *                     共比较2次
  23. *   
  24. *  第3趟         1 2 5 8 9   1<2 不动  得出2是第四大         arr[1] = 2
  25. *                    共比较1次                                    剩余元素则为最小    arr[0] = 1
  26. *         
  27. *                                          
  28. *  分析得 外圈总共4次,外圈第0次循环内圈是4次
  29. *                             外圈第1次循环内圈是3次
  30. *                             外圈第2次循环内圈是2次
  31. *                             外圈第3次循环内圈是1次
  32. *  定义外圈变量 x = 0 ;则内圈是从0 - 4 也就是小于5
  33. *                  x = 1 , y 是 0 - 3  也就是小于4 5 - 1
  34. *          x = 2 . y 是 0 - 2 也就是小于3 5 - 2
  35. *          x = 3 . y 是 0 - 1 也就是小于2 5 - 3
  36. *  
  37. */
  38. public class BubbleSort {

  39.         /**
  40.          * @param args
  41.          */
  42.         static int[] arr = {5,8,9,1,2};
  43.         public static void main(String[] args) {

  44.                 sortArr();
  45.                 printArr();
  46.         }

  47.         public  static void printArr() {
  48.                 System.out.print("[");
  49.                 for (int i = 0; i < arr.length; i++) {
  50.                         if(i!=arr.length-1){
  51.                         System.out.print(arr[i]+" ,");
  52.                         }else{
  53.                                 System.out.println(arr[i]+"]");
  54.                         }
  55.                 }
  56.         }

  57.         public static void sortArr() {
  58.                 for (int i = 0; i < arr.length-1; i++) {
  59.                         for (int j = 0; j < arr.length-1-i; j++) {
  60.                                 if(arr[j]>arr[j+1]){
  61.                                         swap(arr,j,j+1);
  62.                                 }
  63.                         }
  64.                 }
  65.         }

  66.         private static void swap(int[] arr, int i, int j) {
  67.                
  68.                 int temp = arr[i];
  69.                 arr[i] = arr[j];
  70.                 arr[j] = temp;
  71.                
  72.         }

  73. }
复制代码



作者: 大笑哈哈    时间: 2016-5-26 22:09
以学会,不知道为什么现在的基础班不交冒泡排序了,以前都有,还有折半查找什么的都没有了
作者: houdongyue    时间: 2016-5-26 22:20
顶一下又不会怀孕!!!!!
作者: 我认识你    时间: 2016-5-26 22:42
顶一个!1!
作者: 小忧伤    时间: 2016-5-26 22:56
已收 谢谢分享
作者: zhenying.wang    时间: 2016-5-27 00:13
看着感觉还是有点小复杂
作者: 我love    时间: 2016-5-27 00:48
真心觉得经典的冒泡排序,多可爱啊
作者: 可以假装看不见    时间: 2016-5-27 21:41
大笑哈哈 发表于 2016-5-26 22:09
以学会,不知道为什么现在的基础班不交冒泡排序了,以前都有,还有折半查找什么的都没有了 ...

这是一种算法,现在我觉得黑马基础班讲算法很少,都是教你怎么写代码,不教底层了,为了速成,到最后还是需要自己去学习,排序算法,自己研究上一个月都不为过
作者: loop    时间: 2016-5-27 22:15
.....................
作者: 大笑哈哈    时间: 2016-5-27 23:17
可以假装看不见 发表于 2016-5-27 21:41
这是一种算法,现在我觉得黑马基础班讲算法很少,都是教你怎么写代码,不教底层了,为了速成,到最后还是需要 ...

具体到什么地方学习这些算法?还有底层这些,在哪里可以学到?
作者: static小白    时间: 2016-5-27 23:22
顶顶顶顶
作者: 可以假装看不见    时间: 2016-5-27 23:24
大笑哈哈 发表于 2016-5-27 23:17
具体到什么地方学习这些算法?还有底层这些,在哪里可以学到?

这个就是for嵌套,可以看下打印倒三角,正三角,99乘法表 都是这个逻辑算法,底层就是循环遍历,for的底层就不知道了
作者: 可以假装看不见    时间: 2016-5-27 23:26
zhenying.wang 发表于 2016-5-27 00:13
看着感觉还是有点小复杂

有点乱代码 不知道怎么回事,你可以自己粘贴出去 拍下版  我觉得这个还是比较清晰的思路
作者: 大笑哈哈    时间: 2016-5-27 23:27
这些老师还讲过,我记得以前看视频还有折半查找什么的现在都没
作者: guolongfei344    时间: 2016-5-27 23:35
果断顶啦!但是这个学过现在有点记得不起来,还是要知新 加 温故呀
作者: 一架飞机CE3    时间: 2016-5-27 23:41
表示今天研究这个研究了半天
作者: 咬耳朵    时间: 2016-6-1 13:12
不错,学习了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2