选择
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
for (let i = 0; i < arr.length - 1; i++) {
let minIndex = i
for (let j = i; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) minIndex = j
}
if (minIndex !== i) {
arr[i] = arr[i] ^ arr[minIndex]
arr[minIndex] = arr[minIndex] ^ arr[i]
arr[i] = arr[i] ^ arr[minIndex]
}
}
插入排序
它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。每次循环将有序区间增加一位
for (let i = 1; i < arr.length; i++) {
let j = i
while (arr[j] < arr[j - 1] && j > 0) {
arr[j] = arr[j] ^ arr[j - 1]
arr[j - 1] = arr[j - 1] ^ arr[j]
arr[j] = arr[j] ^ arr[j - 1]
j--
}
}
计数
用一个单独的数组的下标标记该下标在目标排序数组中出现的次数。仅限于排序整数数组。
let indexArr = []
for (let i = 0; i < arr.length; i++) {
if (indexArr[arr[i]]) indexArr[arr[i]]++
else indexArr[arr[i]] = 1
}
arr = []
for (let i = 0; i < indexArr.length; i++) {
if (!indexArr[i]) continue
for (j = indexArr[i]; j > 0; j--) {
arr.push(i)
}
}
网友评论