黑马程序员技术交流社区
标题:
关于冒泡排序与两数交换的总结
[打印本页]
作者:
mengxiang1993
时间:
2015-2-25 10:18
标题:
关于冒泡排序与两数交换的总结
package day01;
public class Maopao {
/*
* 在和同学交流过程中,发现很多同学将两数交换经常混淆
* 自己想了一个方法容易理解两数交换:白桶,汽油桶,柴油桶交换
* 供大家学习分享
*/
public static void main(String[] args) {
int[] nums = { 10, 7, 8, 4, 3, 9, 2, 18 };
sort2(nums);
}
/*
* 升序排序
*/
public static void sort(int[] nums) {
int n = 0;// 白桶
// 需要nums.length - 1次排序
for (int i = 0; i < nums.length - 1; i++) {
// 第一次将第一个数排到最后一个数,最后的数将不再参与排序
for (int j = 0; j < nums.length - 1 - i; j++) {
if (nums[j] > nums[j + 1]) {
n = nums[j];// 汽油给白桶,汽油桶为空
nums[j] = nums[j + 1];// 柴油倒入汽油桶,柴油桶为空
nums[j + 1] = n;// 白桶中的汽油倒入柴油桶
}
}
}
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + "\t");
}
}
/*
* 降序
*/
public static void sort2(int[] nums) {
int t = 0;// 白桶
for (int i = 0; i < nums.length; i++) {
//第一次从最后一个数开始比较,将最大的数字放到第一个数的位置,排序好的数将不再参与排序
for (int j = nums.length - 1; j > i; j--) {
if (nums[j] > nums[j - 1]) {
t = nums[j];// 汽油倒入白桶,汽油桶为空
nums[j] = nums[j - 1];// 柴油倒入汽油桶,柴油桶为空
nums[j - 1] = t;// 白桶中的汽油倒入柴油桶
}
}
}
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + "\t");
}
}
}
复制代码
作者:
Hsidar
时间:
2015-2-25 11:33
还有两种交换方式:
// 第一种:即使出现溢出也不会出错,因为会继续溢回来
a = a + b;
b = a - b;
a = a - b;
// 第二种:异或操作符本身就是相反的操作
a = a ^ b;
b = a ^ b;
a = a ^ b;
复制代码
作者:
liaohongjie
时间:
2015-2-26 15:23
学习了,谢谢楼主!!!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2