复习数据结构中的各个排序算法,主要为了自己查看~
1.快排
快排用了分治的思想
时间复杂度:最优(nlogn)最差(n**2)
空间复杂度:logn
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
let dat=[4,1,5,7,2,0,3,7];
function quickSort(data){
if(data.length<=1){
return data;
}
//此处要将基准数从原数组移除,避免上面的data.length判断陷入死循环
let baseData=data.splice(0,1)[0];
//console.log(baseData);
let leftData=[],rightData=[];
//注意此处的data.length和上面不同,移除了基准数,比 上面小1
for(let i=0;i<data.length;i++){
if(data[i]>baseData){
rightData.push(data[i]);
}else{
leftData.push(data[i]);
}
}
leftData=quickSort(leftData);
rightData=quickSort(rightData);
// return leftData.concat(baseData,rightData);
return [...leftData, baseData, ...rightData];
}
var sortedData=quickSort(dat);
console.log(sortedData);
</script>
</body>
</html>
2. 冒泡排序
<script>
function bubbleSort(arr){
for(let i=0; i<arr.length ;i++){
for(let j=arr.length-2; j>=i ;j--){
if(arr[j+1] < arr[j]){
[arr[j+1],arr[j]] = [arr[j],arr[j+1]] //利用解构实现交换值
}
}
}
return arr
}
var a=[9,3,5,2,8,4,1,0,6]
console.log(bubbleSort(a));
</script>
3. 选择排序
<script>
function simpleSelectSort(arr){
let min;
for(let i=0;i<arr.length;i++){
min=i;
for(let j=i+1;j<arr.length;j++){
if(arr[min]>arr[j]){
min=j;
}
}
if(min!==i){
[arr[i],arr[min]]=[arr[min],arr[i]]
}
}
return arr
}
var a=[9,3,5,2,8,4,1,0,6]
console.log(simpleSelectSort(a));
</script>
4. 直接插入排序
<script>
function straightInsertionSort(arr){
for(var i=1; i<arr.length; i++){
var e=arr[i];
for(var j=i-1; arr[j]>e && j>=0; j--){
arr[j+1]=arr[j]
}
arr[j+1]=e
}
return arr
}
var a=[9,3,5,2,8,4,1,0,6]
console.log(straightInsertionSort(a))
</script>
5. 希尔排序
<script>
function shell(arr){
for(let gap=parseInt(arr.length/2); gap>=1 ; gap=parseInt(gap/2)){
for(let i=gap;i<arr.length;i++){ //相当于内部有个直接插入排序
let e=arr[i]
for(var j=i-gap; arr[j]>e && j>=0;j-=gap){
arr[j+gap]=arr[j]
}
arr[j+gap]=e
}
}
return arr
}
var a=[9,3,5,2,8,4,1,0,6]
console.log(shell(a));
</script>