选择排序算法
假设当前要排序的数组如下:
int[] arr = {3, 1, 7, 4, 6};
从图中我们可以看出第一次排序是用第一个元素和后面每个元素进行比较,如果大于就交换位置
下面先上代码:
public static void main(String[] args) {
int[] arr = {3, 1, 7, 4, 6};
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;
}
}
}
可以看到外循环的循环次数是arr.length-1,这里减去1的目的是因为最后一次循环时是自己跟自己比较,没有了意义,所以为了提高效率,这里最后一个不参与运算 比如最后一次循环i=5 j=5,那么就是arr[5]>arr[5],这里肯定是不满足条件,所以外循环次数减1
再来看内循环 int j = j+1 第一次循环时 i=0 j=0,同理就是arr[0]>arr[0],肯定也是不满足条件,为了防止自己和自己进行比较,所以这里加1,比如第一次循环直接拿0索引的值去和1索引的值进行比较
排序结果
第0次排序后: 1 3 7 4 6
第1次排序后: 1 3 7 4 6
第2次排序后: 1 3 4 7 6
第3次排序后: 1 3 4 6 7