1 算法描述
- 首先在未排序数组的首位开始,和后面相邻的数字进行比较,如果前面一个比后面一个大那么则进行交换。
- 接下来在将第二个位置的数字和后面相邻的数字进行比较,如果大那么则进行交换,直到将最大的数字交换的数组的尾部。
- 然后再从排序的数组的首位开始,重复前面两部将最大的数字交换到未排序数组的尾部(交换到尾部的数字是已经拍好序的)。
- 如此反复,直到排序完毕。
2 算法实现
分解1:将第一个数字和后面相邻的数字进行比较,如果大则进行交换
java
int[] arrs = {8, 6, 12, 7, 2, 5, 4, 1, 9};
//判断大小
if(arrs[0]>arrs[1]) {
//如果大,则进行交换
int temp = arrs[0];
arrs[0] = arrs[1];
arrs[1] = temp;
}
//输出结果
for (int i = 0; i < arrs.length; i++) {
System.out.print(arrs[i]+",");
}
分解2:通过比较交换,将最大的数字交换到数组的尾部
java
int[] arrs = { 8, 6, 12, 7, 2, 5, 4, 1, 9 };
for (int i = 0; i < arrs.length - 1; i++) {
// 判断大小
if (arrs[i] > arrs[i + 1]) {
// 如果大,则进行交换
int temp = arrs[i];
arrs[i] = arrs[i + 1];
arrs[i + 1] = temp;
}
}
// 输出结果
for (int i = 0; i < arrs.length; i++) {
System.out.print(arrs[i] + ",");
}
分解3:重复执行分解1和分解2,将最大的数字交换到 未排序数组的尾部,直到排序完成
java
int[] arrs = { 8, 6, 1, 7, 2, 5, 4, 12, 9 };
//
第一个轮交换,将数组中最大的数字交换到数组最后
for (int i = 0; i < arrs.length - 1; i++) {
// 判断大小
if (arrs[i] > arrs[i + 1]) {
// 如果大,则进行交换
int temp = arrs[i];
arrs[i] = arrs[i + 1];
arrs[i + 1] = temp;
}
}
//
第二个轮交换,将数组中最大的数字交换到数组倒数第二位置
for (int i = 0; i < arrs.length - 2; i++) {
//分解1和分解2的代码
}
//
第二个轮交换,将数组中最大的数字交换到数组倒数第三位置
for (int i = 0; i < arrs.length - 3; i++) {
//分解1和分解2的代码
}
// 输出结果
for (int i = 0; i < arrs.length; i++) {
分解4:利用循环代替重复的操作
java
int[] arrs = { 8, 6, 1, 7, 2, 5, 4, 12, 9 };
for (int j = 1; j < arrs.length; j++) {
//
第一个轮交换,将数组中最大的数字交换到数组最后
for (int i = 0; i < arrs.length - j; i++) {
// 判断大小
if (arrs[i] > arrs[i + 1]) {
// 如果大,则进行交换
int temp = arrs[i];
arrs[i] = arrs[i + 1];
arrs[i + 1] = temp;
}
}
}
// 输出结果
for (int i = 0; i < arrs.length; i++) {
System.out.print(arrs[i] + ",");
}