<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js排序</title> </head> <body> </body> <script type="text/javascript"> // 1.比较相邻的两个元素,如果前一个比后一个大(arr[j] > arr[j+1]),则交换位置。 // 2.每轮比较结束的时候最后一个元素应该是最大的一个。 // 3.外层的循环控制循环的次数(length -1),内层循环控制每次需要比较的个数(length -1 -i) let sort = (arr) => { if (!Array.isArray(arr)) { console.log('type error!') return } if(arr.length <= 1){ return 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]){ let temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } return arr; } // 1获取数组长度,以及中间索引及value // 2.与中间值进行比较,小的添加为l_arr数组,大的添加为r_arr数组,相等的添加为m_arr数组 // 3.采用递归的方式进行不断的分割 let quickSort = (arr) =>{ if (!Array.isArray(arr)) { console.log('type error!') return } if(arr.length <= 1){ return arr; } let m_index = Math.floor(arr.length/2); let m_val = arr[m_index]; let l_arr = []; let r_arr = []; let m_arr = []; for(let i =0 ; i < arr.length; i++){ if(arr[i] < m_val){ l_arr.push(arr[i]); }else if(arr[i] > m_val[i]){ r_arr.push(arr[i]) }else { if(i !== m_index){ m_arr.push(arr[i]) } } } return quickSort(l_arr).contact(m_arr,quickSort(r_arr)); } let arr = [2,5,3,0,8,6]; console.log(sort(arr)) // [0, 2, 3, 5, 6, 8] </script> </html>