Java冒泡排序(异或^)
算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
原理:
(1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。
(2)对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
(3)针对所有的元素重复以上的步骤,除了最后一个。
(4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
示例:完成数组{5,3,2,4,1}的升序排列
public class 冒泡排序法 {
public static void main(String[] args) {
//冒泡排序法,从数组“底端【尾部】”每次向上冒出一个值(与前一个值做比较)
int[] array=new int[] {5,3,2,4,1};//定义一个数组array
for(int i=1;i<array.length;i++)//执行轮次:length-1次
{
for(int j=array.length-1;j>=i;j--)//比较次数【从底端{尾部}向前冒】,比一轮少一次
{
if(array[j]<array[j-1])//向前冒的条件:升序(小的数往上升) ***降序:小于 变 大于
{
// int temp =array[j];//交换数值语法:添加中间值
// array[j]=array[j-1];
// array[j-1]=temp;
//加法实现
//array[j]=array[j]+array[j-1];
//array[j-1]=array[j]-array[j-1];
//array[j]=array[j]-array[j-1];
//异或实现交换值
array[j]=array[j]^array[j-1];
array[j-1]=array[j]^array[j-1];
array[j]=array[j]^array[j-1];
/*
异或思路
int a=60;//0011 1100
int b=13;//0000 1101
a=a^b;//a=a^b=0011 0001
b=a^b;//b=a^b=0011 1100 相当于b1=(a^b)^b
a=a^b;//a=a^b=0000 1101 相当于a1=(a^b)^((a^b)^b)
*/
}
}
}
for(int v:array) {//遍历输出数组中的所有值
System.out.println(v);
}
}
}