一、实现思想: 例如有以下数字 {1 5 8 7 6 3 2 4}
首先比较第一个和第二个位置上的数字,数字更大的往右边移动 每执行一次循环之后都会排出一个最大的值在该数组的最后一位。
二、以下是代码部分
private static int[] arr = new int[]{1 ,5 ,8 ,7 ,6 ,3 ,2 ,4};
public static void main(String[] args) {
//range是控制在哪个范围上执行一遍循环的意思
//第一遍执行的时候范围的大小1~range
//第二遍执行的时候范围的大小1~range-1
for(int range = arr.length; range>0 ; range--){
//需要注意的是范围上的问题
//目前arr的长度为8,下标也就是[0-7]
//所以要控制arr取值的时候不能取到arr[8]位置上的数字,会报错为下标越界
for(int i = 0; i< range-1 ; i++){
if(arr[i]>arr[i+1]){
swap(arr,i,i+1);
}
}
}
for(int i:arr){
System.out.println(i+"\r");
}
}
//使用抑或方式,可以不申请额外的空间变量,直接做到两个数字交换。
//需要注意的是两个数字绝对不能指向空间,如果指向一个空间,那么数字会被洗为0或者1.
private static void swap(int[] arr, int i, int i1) {
//假设arr[i]是甲 arr[i1]是已
//甲 = 甲^已
//已 = 甲^已 带入甲的值 已=甲^已^已=甲
//甲 = 甲^已 带入已的值 甲=甲^已^甲=已
arr[i] = arr[i] ^arr[i1];
arr[i1] = arr[i] ^arr[i1];
arr[i] = arr[i] ^arr[i1];
}
小剧场 :行则将至!
|