冒泡排序(Bubble Sort)
核心思想:
相邻元素两两比较,大的往后放,第一次比较完毕后,最大值出现在最大索引处.
规律:
1. 两两比较,大的往后放(内循环内代码块)
2. 每一次比较完毕后,下一次比较减少一个元素的比较(j < arr.length - 1 - i)
第一次比完后,最后一个数一定是数组中最大的一个数,所以第二次比较时最后一个数不参与比较;
第二次比完后,倒数第二个数也一定是数组中第二大的数,所以第三次比较时最后两个数不参与比较;
...
3. 第一次比较,0个元素不比(j < arr.length - 1 - i)
第二次比较,1个元素不比
第三次比较,2个元素不比
...
4. 总共比较数据长度 -1 次(外层循环控制)
代码:
int[] arr = {5, 8, 2, 9, 1};
//外层控制循环次数
for (int x = 0; x < arr.length - 1; x++) {
for (int y = 0; y < arr.length - 1 - x; y++) { //内层循环控制每次比较多少个元素(每一次比较完,下一次减少一个元素的比较)
if (arr[y] > arr[y + 1]) {
int temp = arr[y];
arr[y] = arr[y + 1];
arr[y + 1] = temp;
}
}
}
图解:
冒泡排序选择排序(Select Sort)
核心思想:
从 0 索引开始,依次和后面每个元素比较,小的放入前面,第一次比完组小值出现在最小索引处
规律:
1.第一次是从 0 索引处开始依次和后面每个元素比较
第二次是从 1 索引处开始一次和后面每个元素比较
...
2.最后一次是数组长度 -2 索引的元素和数组长度 -1 索引的元素比较(也就是最后两个,所以比较的次数也是长度 -1 次)
代码:
int[] arr = {5, 8, 2, 9, 1};
for (int x = 0; x < arr.length - 1; x++) {
for (int y = x + 1; y < arr.length; y++) {
if (arr[y] < arr[x]) {
int temp = arr[y];
arr[y] = arr[x];
arr[x] = temp;
}
}
}
图解:
选择排序
网友评论