选择排序和冒泡排序

选择排序和冒泡排序有些相似,所以把它们两个放在一起写,记录下

选择排序

原理

对于一个给定的数组,首先找到数组中最小的元素,其次,将它和数组中的第一个元素交换位置(如果第一个元素即使最小元素,那么它就和自己交换)。再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
public void sort(Comparable[] arr) {
for (int i = 0; i < arr.length; i++) {
int min = i;
for (int j = i + 1; j < arr.length; j++) {
//求最小值
if (less(arr[j], arr[min])) {
min = j;
}
}
//交换值
exch(arr, i, min);
}
}

冒泡排序

原理

对于一个给定的数组,有n个元素。从第一个元素开始,每个元素跟后面相邻的元素进行比较,把大的或者小的元素放到后面,第一遍比较完毕之后,最后一个元素是最大或者最小的,第二遍比较的时候,最后一个元素不参与比较。如此往复,直到整个数组排序完毕。

代码

1
2
3
4
5
6
7
8
9
public void sort(Comparable[] arr) {
for (int i = 0; i < arr.length; i++) {//控制循环次数
for (int j = 0; j < arr.length - 1 - i; j++) {
if (less(arr[j], arr[j + 1])) {
exch(arr, j, j + 1);
}
}
}
}

说明

less方法是比较传入的两个数的大小,exch方法是交换两个数位置。