<!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>