黑马程序员技术交流社区

标题: 关于冒泡排序与两数交换的总结 [打印本页]

作者: mengxiang1993    时间: 2015-2-25 10:18
标题: 关于冒泡排序与两数交换的总结
  1. package day01;

  2. public class Maopao {
  3.         /*
  4.          * 在和同学交流过程中,发现很多同学将两数交换经常混淆
  5.          * 自己想了一个方法容易理解两数交换:白桶,汽油桶,柴油桶交换
  6.          * 供大家学习分享
  7.          */

  8.         public static void main(String[] args) {

  9.                 int[] nums = { 10, 7, 8, 4, 3, 9, 2, 18 };
  10.                 sort2(nums);
  11.         }

  12.         /*
  13.          * 升序排序
  14.          */
  15.         public static void sort(int[] nums) {
  16.                 int n = 0;// 白桶
  17.                 // 需要nums.length - 1次排序
  18.                 for (int i = 0; i < nums.length - 1; i++) {
  19.                         // 第一次将第一个数排到最后一个数,最后的数将不再参与排序
  20.                         for (int j = 0; j < nums.length - 1 - i; j++) {
  21.                                 if (nums[j] > nums[j + 1]) {

  22.                                         n = nums[j];// 汽油给白桶,汽油桶为空
  23.                                         nums[j] = nums[j + 1];// 柴油倒入汽油桶,柴油桶为空
  24.                                         nums[j + 1] = n;// 白桶中的汽油倒入柴油桶
  25.                                 }
  26.                         }
  27.                 }
  28.                 for (int i = 0; i < nums.length; i++) {
  29.                         System.out.print(nums[i] + "\t");
  30.                 }

  31.         }

  32.         /*
  33.          * 降序
  34.          */
  35.         public static void sort2(int[] nums) {
  36.                 int t = 0;// 白桶

  37.                 for (int i = 0; i < nums.length; i++) {
  38.                         //第一次从最后一个数开始比较,将最大的数字放到第一个数的位置,排序好的数将不再参与排序
  39.                         for (int j = nums.length - 1; j > i; j--) {
  40.                                
  41.                                 if (nums[j] > nums[j - 1]) {
  42.                                         t = nums[j];// 汽油倒入白桶,汽油桶为空
  43.                                         nums[j] = nums[j - 1];// 柴油倒入汽油桶,柴油桶为空
  44.                                         nums[j - 1] = t;// 白桶中的汽油倒入柴油桶

  45.                                 }

  46.                         }
  47.                 }
  48.                 for (int i = 0; i < nums.length; i++) {
  49.                         System.out.print(nums[i] + "\t");
  50.                 }

  51.         }

  52. }
复制代码



作者: Hsidar    时间: 2015-2-25 11:33
还有两种交换方式:
  1.                 // 第一种:即使出现溢出也不会出错,因为会继续溢回来
  2.                 a = a + b;
  3.                 b = a - b;
  4.                 a = a - b;
  5.                
  6.                 // 第二种:异或操作符本身就是相反的操作
  7.                 a = a ^ b;
  8.                 b = a ^ b;
  9.                 a = a ^ b;
复制代码

作者: liaohongjie    时间: 2015-2-26 15:23
学习了,谢谢楼主!!!!




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