思路:
将数组中的数据进行比较,第一次循环将第一个数据和第二个数据进行比较,如果第一个数据大于第二个数据,则将两个数据位置进行交换,否则位置不变,此时生成的新数组第一个位置和第二个位置实现有序;
第二次循环先将第二个数据和第三个数据进行比较,如果第二个数据大于第三个数据,则将两个数据进行交换,生成新的数组,此时第二个位置数据和第三个位置数据实现有序;然后再将第一个数据和第二个数据进行比较,如果第一个数据大于第二个数据,再次进行交换,从而实现第一到第三位置有序,依次类推。
图解:
代码:
public static void main(String[] args) {
int[] arr = {4,2,9,7,0,5,1,5,6};
//外层循环,循环整个数组
for(int i = 1; i < arr.length; i++) { //循环从1开始,因为0位置不需要进行比较
/*
* 第二层循环将位置在下标从0[j]开始和下标为1[j+1]的值开始比较
* 如果0[j]位置值大于1[j+1]位置的值则调换位置,否则继续循环
* j--:举例,例如外层循环从1开始,内层循环j=i-1=0,就是从数组第一个值开始,如果arr[0]>arr[j+1],现在j+1就是1
* 如果0位置大于1位置的值则换位,从而实现0位置和1位置有序,然后j--值为-1,不满足条件则结束,进入第一层循环的i++
* 再到第二层循环,现在i=2,j=i-1=1,如果arr[j]>arr[j+1](arr[1]>arr[2]),相同的,如果1位置的值大于2位置的值
* 就交换两个值的位置,实现1和2位置的有序,然后j--是0,再对比0和1位置的值,再继续排序,最后j--是-1,二层循环结束
* 依次类推,直到整个数组有序
*/
for(int j = i - 1; j >=0 && arr[j] > arr[j + 1]; j--) {
swap(arr,j,j+1);
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
}
//换位
public static void swap(int arr[],int i,int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}