原理:比较两个相邻的元素,将值大的元素交换至右端。
举个简单栗子来说明int[] arr={6,3,4,9,1,2};
第一趟排序:
比较6和3,交换位置 3,6,4,9,1,2
比较6和4,交换位置 3,4,6,9,1,2
比较6和9,不交换位置 3,4,6,9,1,2
比较9和1,交换位置 3,4,6,1,9,2
比价9和2,交换位置 3,4,6,1,2,9
第二趟排序:
比较3和4,不交换位置 3,4,6,1,2,9
比较4和6,不交换位置 3,4,6,1,2,9
比价6和1,交换位置 3,4,1,6,2,9
比价6和2,交换位置 3,4,1,2,6,9
第三趟排序:
比较3和4,不交换位置 3,4,1,2,6,9
比较4和1,交换位置 3,1,4,2,6,9
比价4和2,交换位置 3,1,2,4,6,9
第四趟排序:
比较3和1,交换位置 1,3,2,4,6,9
比较3和2,交换位置 1,2,3,4,6,9
第五趟排序:
比较1和2,不交换位置 1,2,3,4,6,9
按照图上的顺序就是N个数字需要(N-1)次排序 每i趟去排序是(N-i)次比较
所以嵌套的循环就是
for(int i=1;i<arr.length;i++){
for(int j=1;j<arr.length-i;j++){
//交换位置
}
}
所以最终的排序方法可以这么写
for(int i=0;i<arr.length-1;i++){//外层循环控制排序趟数
for(int j=0;j<arr.length-1-i;j++){//内层循环控制每一趟排序多少次
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}