选择排序法
图解:
题目分析:
通过观察发现,题目要实现把数组元素{13,46,22,65,3}进行排序
1.提到数组排序,就要进行元素值大小的比较,通过上图发现,想完成排序要经过若干次的比较才能够完成。
2.上图中用每圈要比较的第一个元素与该元素后面的数组元素依次比较到数组的最后一个元素,把小的值放在第一个数组元素中,数组循环一圈后,则把最小元素值互换到了第一个元素中。
3.数组再循环一圈后,把第二小的元素值互换到了第二个元素中。按照这种方式,数组循环多圈以后,就完成了数组元素的排序。这种排序方式我们称为选择排序。
解题步骤:
1.用于循环(外层循环),指定数组要循环的圈数(通过图解可知,数组循环的圈数为数组长度 - 1)
2.在每一圈中,通过对循环(内层循环)完成数组要比较的第一个元素与该元素后面的数组元素依次比较到数组的最后一个元素,把小的值放在第一个数组元素中
3.在每一圈中,要参与比较的第一个元素由第几圈循环来决定。如上图所示
一)进行第一圈元素比较时,要比较的第一个元素为数组第一个元素,即索引为0的元素
B)中进行第二圈元素比较时,要比较的第一个元素为数组第二个元素,即索引为1的元素
C)中依次类型,得出结论:进行第Ñ圈元素比较时,要比较的第一个元素为数组第Ñ个元素,即数组索引为N-1的元素
代码如下:
// 选择排序
public static void selectSort(int[] arr) {
// 功能
// 外层循环用来控制数组循环的圈数
for (int i = 0; i < arr.length - 1; i++) {
// 内层循环用来完成元素值比较,把小的元素值互换到要比较的第一个元素中
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
冒泡排序法
图解:
题目分析:
通过观察发现,题目要实现把数组元素{13,46,22,65,3}进行排序
1.提到数组排序,就要进行元素值大小的比较,通过上图发现,想完成排序要经过若干次的比较才能够完成。
2.上图中相邻的元素值依次比较,把大的值放后面的元素中,数组循环一圈后,则把最大元素值互换到了最后一个元素中。数组再循环一圈后,把第二大的元素值互换到了倒数第二个元素中。按照这种方式,数组循环多圈以后,就完成了数组元素的排序。这种排序方式我们称为冒泡排序。
解题步骤:
1.用于循环(外层循环),指定数组要循环的圈数(通过图解可知,数组循环的圈数为数组长度 - 1)
2.在每一圈中,通过对循环(内层循环)完成相邻的元素值依次比较,把大的值放后面的元素中
3.每圈内层循环的次数,由第几圈循环来决定。如上图所示
a)进行第一圈元素比较时,内层循环次数为数组长度 - 1
b)进行第二圈元素比较时,内层循环次数为数组长度 - 2
c)依次类型,得出结论:进行第n圈元素比较时,内层循环次数为数组长度 - n
代码如下:
// 冒泡排序
public static void bubbleSort(int[] arr) {
//功能
//外层循环用来控制数组循环的圈数
for (int i = 0; i < arr.length-1; i++) {
//j < arr.length-1 为了避免角标越界
//j < 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;
}
}
}
}