- 冒泡排序
(基本思想:外层循环每一次经过两两比较,把每一轮未排定部分最大的元素放到了数组的末尾)
function bubbleSort(arr) {
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
return arr
}
- 选择排序
(思路:每一轮选取未排定的部分中最小的部分交换到未排定部分的最开头,经过若干个步骤,就能排定整个数组。即:先选出最小的,再选出第 2 小的,以此类推)
sortArray = function(nums) {
for (let i = 0; i < nums.length; i++) {
let min = Infinity;
let minIndex;
for (j = i; j < nums.length; j++) {
if (nums[j] < min) {
min = nums[j]
minIndex = j;
}
}
[nums[i], nums[minIndex]] = [nums[minIndex], nums[i]];
}
return nums;
};
function quickSort(arr){
if(arr.length<=1) return arr;
var pivotIndex=Math.floor(arr.length/2);
var pivot=arr.splice(pivotIndex,1)[0];
var left=[];
var right=[];
for(var i=0;i<arr.length;i++){
if(arr[i]<=pivot){
left.push(arr[i]);
}
else{
right.push(arr[i]);
}
}
return quickSort(left).concat([pivot],quickSort(right));
}
- 插入排序
(思路:每次将一个数字插入一个有序的数组里,成为一个长度更长的有序数组,有限次操作以后,数组整体有序)
var sortArray = function(nums) {
for(let i = 1,len = nums.length;i<len;i++) {
const temp = nums[i]
let j = i
while(j > 0 && temp < nums[j-1]) {
nums[j] = nums[j-1]
j--
}
nums[j] = temp
}
return nums
};
- 归并排序
(通过先递归的分解数列,再合并数列就完成了归并排序)
function mergeSort(arr) {
let array = mergeSortRec(arr);
return array;
}
function mergeSortRec(arr) {
let length = arr.length;
if (length === 1) {
return arr;
}
let mid = Math.floor(length / 2),
left = arr.slice(0, mid),
right = arr.slice(mid, length);
return merge(mergeSortRec(left), mergeSortRec(right));
}
function merge(left, right) {
let result = [],
i = 0,
j = 0,
k = 0;
while (i < left.length && j < right.length) {
if (left[i] < right[j]) {
result[k++] = left[i++];
} else {
result[k++] = right[j++];
}
}
while (i < left.length) {
result[k++] = left[i++];
}
while (j < right.length) {
result[k++] = right[j++];
}
return result;
}