整理一下各种排序算法
1.冒泡排序
时间复杂度O(n^2),时间比较长,但是比较容易理解和实现。
//冒泡排序
public int[] sortArray(int[] nums) {
for (int i = 0; i < nums.length - 1; i++) {
for (int j = 0; j < nums.length - i - 1; j++) {
if (nums[j] > nums[j+1]) {
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j+1] = temp;
}
}
}
return nums;
}
2.快速排序
选定一个基准值(一般是数组的第一个值),一次把比基准小的数字放在左边,比基准大的数字放在右边。然后分别对左边部分和右边部分执行相同的操作。利用递归来完成子数组的排序。
时间复杂度:O(nlog2n)
//快速排序
public int[] sortArray(int[] nums) {
qSort(nums, 0, nums.length-1);
return nums;
}
public void qSort(int[] nums, int start, int end) {
if (nums == null || nums.length <= 1 || start >= end) {
return;
}
int i = start;
int j = end;
int baseNum = nums[(start + end) / 2];
while (i <= j) {
while (nums[i] < baseNum) {
++i;
}
while (nums[j] > baseNum) {
--j;
}
if (i < j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
++i;
--j;
} else if (i == j) {
++i;
}
}
qSort(nums, start, j);
qSort(nums, i, end);
}