简单选择排序
function selectSort(nums) {
for (let i = 0; i < nums.length - 1; i++){
let index = i
for (let j = i + 1; j < nums.length; j++) {
if (nums[j] < nums[index]) {
index = j
}
}
if (index !== i) {
let tmp = nums[i]
nums[i] = nums[index]
nums[index] = tmp
}
}
}
插入排序
function insertSort(nums) {
for(let i = 0; i < nums.length - 1; i++) {
let index = i + 1
while(index > 0 && nums[index] < nums[index-1]){
let tmp = nums[index]
nums[index] = nums[index-1]
nums[index-1] = tmp
index--
}
}
}
冒泡排序
function bubbleSort (nums) {
for (let i = 0; i < nums.length; i++) {
for (let j = 0; j < nums.length - i - 1; j++) {
if (nums[j] > nums[j+1]) {
let tmp = nums[j]
nums[j] = nums[j+1]
nums[j+1] = tmp
}
}
}
}
归并排序
function mergeSort (nums, low, high) {
if (low < high) {
let mid = Math.floor((low + high)/2)
mergeSort(nums, low, mid)
mergeSort(nums, mid+1, high)
merge(nums, low, mid, high)
}
}
function merge(nums, low, mid, high) {
let tmp = new Array(high-low+1)
let i = low, j = mid+1
let index = 0
while( i <= mid && j <= high){
if(nums[i] < nums[j]) {
tmp[index++] = nums[i++]
} else {
tmp[index++] = nums[j++]
}
}
for(;i <= mid;) {
tmp[index++] = nums[i++]
}
for(;j <= high;) {
tmp[index++] = nums[j++]
}
for(let k = 0; k < tmp.length; k++) {
nums[low + k] = tmp [k]
}
}
快排
function quickSort (nums, low, high) {
if (low >= high) return
let tmp = nums[low],i = low,j = high
while(i < j) {
while(i < j && nums[j] >= tmp) {
j--
}
if (i < j) {
nums[i++] = nums[j]
}
while(i < j && nums[i] < tmp) {
i++
}
if (i < j) {
nums[j--] = nums[i]
}
}
nums[i] = tmp
quickSort(nums,low,i-1)
quickSort(nums,i+1,high)
}
测试代码
(
function () {
let nums1 = [34,66,67,324,87,34,76,23,45,66,567,23,4,87]
let nums2 = [34,66,67,324,87,34,76,23,45,66,567,23,4,87]
selectSort(nums1)
// insertSort(nums2)
bubbleSort(nums2)
// mergeSort(nums2)
// quickSort(nums2)
document.write(judgeEqual(nums1, nums2))
}
)()
function judgeEqual (nums1, nums2) {
if (nums1.length !== nums2.length) {
return false
}
for (let i = 0; i < nums1.length; i++) {
if (nums1[i] !== nums2[i]) {
return false
}
}
return true
}