思路:
俩俩交换,大的放在后面,第一次排序后最大值已在数组末尾。
因为俩俩交换,需要n-1趟排序,比如10个数,需要9趟排序
代码实现要点:
两个for循环,外层循环控制排序的趟数,内层循环控制比较的次数
每趟过后,比较的次数都应该要减1
优化:如果一趟排序后也没有交换位置,那么该数组已有序~
//外层循环是排序的趟数
for (int i = 0; i < arrays.length -1 ; i++) {
//每比较一趟就重新初始化为0
isChange = 0;
//内层循环是当前趟数需要比较的次数
for (int j = 0; j < arrays.length - i - 1; j++) {
//前一位与后一位与前一位比较,如果前一位比后一位要大,那么交换
if (arrays[j] > arrays[j + 1]) {
temp = arrays[j];
arrays[j] = arrays[j + 1];
arrays[j + 1] = temp;
//如果进到这里面了,说明发生置换了
isChange = 1;
}
}
//如果比较完一趟没有发生置换,那么说明已经排好序了,不需要再执行下去了
if (isChange == 0) {
break;
}
}
来源:CSDN
作者:M&Y
链接:https://blog.csdn.net/qq_37883866/article/details/103637495