原理:将数组中每个元素与第一个元素相比较,如果这个元素小于第一个元素,则交换这两个元素,循环第1条规则,找出最小元素,放于第1个位置,经过n-1轮比较完成排序。
/**
* 选择排序
*/
int[] arr = {
1, 7, 8, 9, 2, 3, 4, 5, 6 };
System.out.println("排序前:" + Arrays.toString(arr));
int temp;
for (int i = 0; i < arr.length - 1; i++) {
// 比较轮数
for (int j = i + 1; j < arr.length; j++) {
// 内层循环
if (arr[i] > arr[j]) {
// 使用temp存放,再交换
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.println("排序后:" + Arrays.toString(arr));
原理:比较相邻的元素,将小的元素放在前面,比较一轮后,最大的就放到最后面,经过n-1轮的比较完成排序。
/**
* 冒泡排序
*/
int[] arr = {
1, 7, 8, 9, 2, 3, 4, 5, 6 };
System.out.println("排序前:" + Arrays.toString(arr));
int temp;
for (int i = 0; i < arr.length - 1; i++) {
// 比较轮数
for (int j = 0; j < arr.length-i-1; j++) {
// 内层循环
if (arr[j] > arr[j+1]) {
// 使用temp存放,再交换
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println("排序后:" + Arrays.toString(arr));
原理:
①、将数组分为两部分,将后部分的第一个逐一与前部分每一个元素比较,再合理位置插入。
②、插入排序算法效率要高于选择排序喝冒泡排序
开始比较的是i跟i+1开始比较;
首先:遍历一次数组,初始值为下标1
把下标1交给 temp
temp = arr[1]
进行内层循环
j = i - 1 ———— j = 1 - 1———— j = 0
这里的 j=arr[0]
(j >= 0 && arr[j] > temp)
arr[j] = 1
满足条件1 && 1 > 7
所以第一轮的比较是:1跟7比
/**
* 插入排序
*/
int[] arr = {
1, 7, 8, 9, 2, 3, 4, 5, 6 };
System.out.println("排序前:" + Arrays.toString(arr));
int temp;
for (int i = 1; i < arr.length; i++) {
// 比较轮数
temp = arr[i];// 待插入类
int j;
for (j = i-1; (j >= 0 && arr[j] > temp); j--) {
// 内层循环
arr[j+1] = arr[j];//把数右移
}
arr[j+1] = temp;// 插入
}
System.out.println("排序后:" + Arrays.toString(arr));