一、数值交换
方法一
int a=1;
int b=2;
int c;
c=a;
a=b;
b=c;
System.out.println(a);
System.out.println(b);
System.out.println(c);
方法二
(加减法交换)
int a=1;
int b=2;
c=a+b;
a=c=a;
b=c-b;
System.out.println(a);
System.out.println(b);
System.out.println(c);
方法三
(乘除法交换)
int a=1;
int b=2;
int c;
c=a*b;
a=c/a;
b=c/b;
System.out.println(a);
System.out.println(b);
System.out.println(c);
方法四
(异或符交换),使用异或符,比较对应的二进制,相同为0,不相同为1
int a=7;
int b=9;
/*
a 7 0111
b 9 1001
两个数值进行异或
a^b 1110
交换数值
a=a^b 1110
b=a^b 1110 ^ 1001——> 0111 b=7
a=a^b 1110 ^ 0111——> 1001 a=9
*/
a=a^b
b=a^b
a=a^b
System.out.println(a);
System.out.println(b);
二、冒泡排序
原理:
比较相邻元素,将大的值移动到右侧(升序)
1、定义数组
int[] array = {22,33,10,45,2};
第一趟比较:
把数值最大的那一个元素放到数组的最右边
for (int i = 0; i < array.length-1; i++) {
if (array[i] > array[i + 1]) {
int temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
}
}
System.out.println(Arrays.toString(array));//打印数组
第二趟比较:
然后忽略最右边的数据,比较前面几个数据,把前几个数据中最大的放到右边,依次进行
for (int i = 0; i < array.length-1-1; i++) {
if (array[i] > array[i + 1]) {
int temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
}
}
System.out.println(Arrays.toString(array));//打印数组
第三趟比较:
for (int i = 0; i < array.length-1-1-1; i++) {
if (array[i] > array[i + 1]) {
int temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
}
}
System.out.println(Arrays.toString(array));//打印数组
第四趟比较:
for (int i = 0; i < array.length-1-1-1-1; i++) {
if (array[i] > array[i + 1]) {
int temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
}
}
System.out.println(Arrays.toString(array));//打印数组
最后比较完,就得到了升序后的结果
2、循环嵌套比较
上次比较的是数组长度相对较小的,然而比较数组长度大的是不是会很麻烦?所以在此进行数组的嵌套来进行比较。
for(int i=0;i<array.length-1;i++){
for(int j=0;j<array.length-i-1;j++){
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
System.out.println(Arrays.toString(array));
/*
i=0 比较第一趟 得到最大值放在最右边
i=1 比较第二趟 得到第二大值放在右边
.
.
.
直到比较完了array.length-1次,结束循环,得到冒泡排序后的结果
*/
到此,冒泡排序完成,如果降序的话只要修改if条件语句里面的内容即可。欢迎评价、点赞和收藏。