A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mengxiang1993 中级黑马   /  2015-2-25 10:18  /  863 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. }
复制代码


评分

参与人数 1黑马币 +2 收起 理由
万合天宜 + 2 加油~~

查看全部评分

2 个回复

倒序浏览
还有两种交换方式:
  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;
复制代码
回复 使用道具 举报 1 0
学习了,谢谢楼主!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马