冒泡排序
int[] arr = {13, 2, 1, 23, 4, 5, 16, 7, 8, 38, 3, 4, 11, 5, 6, 7};
System.out.println("冒泡排序前:" + Arrays.toString(arr));
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]){
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println("冒泡排序后:" + Arrays.toString(arr));
说明:冒泡排序时间复杂度是O(n²),空间复杂度是O(1),是稳定的排序(值相同,排序前后相对位置不发生改变)
选择排序
int[] arr = {13, 2, 1, 23, 4, 5, 16, 7, 8, 38, 3, 4, 11, 5, 6, 7};
System.out.println("选择排序前:" + Arrays.toString(arr));
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;
}
}
}
System.out.println("选择排序后:" + Arrays.toString(arr));
选择排序还有另一种代码表现,博主以前看到的选择排序都是下面的这样的
int[] arr = {13, 2, 1, 23, 4, 5, 16, 7, 8, 38, 3, 4, 11, 5, 6, 7};
System.out.println("选择排序前:" + Arrays.toString(arr));
for (int i = 0; i < arr.length - 1; i++) {
int min = i;
for (int j = i + 1; j < arr.length; j++) {
// 这里的判断决定是升序还是降序,>升序,<降序
if (arr[min] > arr[j]) {
min = j;
}
}
// 和上面那份代码的改动在:不是交换相邻元素,而是一步到位,直接和该元素应该存放的位置进行交换
if (min != i) {
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
}
System.out.println("选择排序后:" + Arrays.toString(arr));
说明:选择排序时间复杂度是O(n²),空间复杂度是O(1),是不稳定的排序
分析:
选择排序交换次数比冒泡排序少,所以元素较少时,使用选择排序效率高;
选择排序不稳定,所以需要排序稳定时,使用冒泡排序