作者:Manordo | 来源:互联网 | 2023-10-13 07:42
注意:第一步执行次数为,表示“比较大小”的步骤仅发生在还没有进行过比较的剩余元素中。外层循环(i循环)的循环次数不是数组长度,而是数组长度-1。因为元素两两比较大小只会发生次。
交换两坐标位置的swap()函数 之后要用到
public static void swap(int[] arr, int a, int b) {int temp;temp = arr[a];arr[a] = arr[b];arr[b] = temp;}
采用空瓶法。交换变量的三种方法 →点这里
冒泡排序
public static void bubbleSort(int[] arr) {for (int i = 0; i
arr[j + 1]) {swap(arr, j, j + 1);}}}} 将arr.length个数组中的元素按照由小到大排序:
1.从第一个元素(0号元素)开始,比较它(j)和他之后的元素(j+1)的大小并交换,将最大的元素放置在队尾。
2.重复执行1步骤(length - 1)次,每次都将剩余元素中最大的元素放置在剩余元素的队尾。
注意:
第一步执行次数为(length - 1 - j),表示“比较大小”的步骤仅发生在还没有进行过比较的剩余元素中。
外层循环(i循环)的循环次数不是数组长度,而是数组长度 - 1。因为元素两两比较大小只会发生(n - 1)次。类似五个手指头之间有四条手指缝。如果进行i次排序,程序会报错 java.lang.ArrayIndexOutOfBoundsException。
选择排序
public static void selectionSort(int[] arr) {int min = 0;int flag = -1;for (int i = 0; i 将arr.length个数组中的元素按照由小到大排序:
1.找出length个元素其中最小的数并放在数组的第一个位置(0号位)
2.执行length次1步骤。每次都将剩余元素中最小的数放在剩余元素的第一位。
注意:
每次将剩余元素的第一个元素设定为最小值min,如果之后遇到比第一位更小的元素,则替换最小值,记忆此元素的位置,再继续比较。
每次比较将从上一次比较完成的元素的下一位开始,到队尾结束。 插入排序:
这里提供两种写法
public static void insertSort(int[] arr) {for (int i = 1; i 0 && arr[j] 将arr.length个数组中的元素按照由小到大排序:
插入排序的理解可以类比扑克牌的摸牌阶段(来自我的一位学长)。按照元素在数组中的顺序,先抽取第一个元素捏在手中,再抽取第二个元素即第二张牌,如果第二张牌比第一张牌小,则把第二张插入在第一张牌的前面,如果不比第一张牌小(>或=),则放在第一张牌后面;继续抽取第三张牌,与第二张进行比较,如果比第二张小,则插入在第二张牌的前面,接着比较第三张与第一张牌的大小,如果第三张比第一张小,则插入在第一张前面,如果不比第一张牌小(>或=),则停止继续向前比较;继续抽取第四张牌,依次和前一张牌比较……直到成为第一张牌或不比前一张牌小(>或=)……以此类推。
注意:
插入排序和冒泡排序的不同之处在于:插入排序只要遇到当前元素和它的前一个元素不满足交换的条件(>或<),就立即退出循环(体现在代码 && arr[j] 第二种写法: public static void insertSort(int[] arr) {for (int i = 1; i 如有错误或有更好的改进意见,欢迎批评指正!