交换类(冒泡、快排)
1.冒泡排序
function sort(arr) {
if (!Array.isArray(arr) || arr.length < 2) {
return;
}
let len = arr.length,
i, j, tmp;
for(i = 0; i < len - 1; i++) {
//len个数只需要比较len-1次即可
for (j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
时间复杂度 O(n^2) :两层for循环都与数组长度有关
空间复杂度O(1):属于交换类排序,且无需额外的与数组长度有关的辅助变量
稳定排序:if比较相邻两个值时,仅左大于右才交换,所以稳定
2.快速排序
function sort(arr) {
if (!Array.isArray(arr) || arr.length < 2) {
return;
}
quickSort(arr, 0, arr.length - 1);
}
function quickSort(arr, start, end) {
if (start < end) {
let pivotIndex = getPivotIndex(arr, start, end);
quickSort(arr, start, pivotIndex);
quickSort(arr, pivotIndex + 1, end);
}
}
function getPivotIndex(arr, start, end) {
let pivot = arr[start];
while(start < end) {
if(start < end && arr[end] > pivot) {
end--;
}
arr[start] = arr[end];
if(start < end && arr[start] < pivot