冒泡+选择排序
冒泡排序老算法了,这次系统学习排序算法重温一遍,再加上flag优化一下。时间复杂度O(n2)
void bubbleSort(int[] nums) {
for (int i = 0; i < nums.length - 1; i++) {
boolean flag = false;
for (int j = nums.length - 1; j > i; j--)
if (nums[j] < nums[j - 1]) {
nums[j] ^= nums[j - 1];
nums[j - 1] ^= nums[j];
nums[j] ^= nums[j - 1];
flag = true;
}
if (flag == false)
break;
}
}
选择排序感觉与冒泡类似,时间复杂度同为O(n2)
void selectSort(int[] nums){ for (int i = 0; i < nums.length - 1; i++) { int index = i; for (int j = i + 1; j < nums.length; j++) { if (nums[j] < nums[index]) { index = j; } } if (index != i) { int tmp = nums[i]; nums[i] = nums[index]; nums[index] = tmp; } } }
冒泡排序一般是稳定的,相邻的等值元素(包括经过一系列交换后相邻)不会颠倒顺序。
选择排序不稳定,当局部数组首元素与最小值交换时,首元素与数组中等值元素的先后顺序可能颠倒。