数据结构与算法
半夜追风人
梦不追,不可为
展开
-
6.快速排序
//快速排序:选定一个数,将数组中比他大的放在右边,比他小的放在右边; // 那么该趟排序中,就确定了选定数字的位置;我们在对左边和右边进行递归排序,最终所有位置都确定 function quickSort(arr){ //用于交换的函数 function swap(arr,idx1,idx2){ let tmp=arr[idx1] arr[idx1]=arr[idx2] arr[idx2]=tmp } //原创 2021-10-16 13:04:04 · 106 阅读 · 0 评论 -
5.归并排序
//归并排序:分而治之;先分治,分到只有一个元素,再合并 function mergeSort(arr){ if (arr.length===1){ return arr } let preArr=arr.slice(0,Math.floor(arr.length/2)) let lastArr=arr.slice(Math.floor(arr.length/2),arr.length) let res1=mergeSort(preArr)//前半部原创 2021-10-16 13:01:37 · 63 阅读 · 0 评论 -
4.计数排序
//计数排序:利用桶统计各个数字出现的次数,再通过桶的key构建新返回数组 //复杂度:时间O(n) 空间:O(n) //适用场景:数字个数较多,数字范围较小 function countSort(arr){ let tong=[] for (let i=0;i<arr.length;i++){ if (!tong[arr[i]]){ tong[arr[i]]=0 } tong[arr[i]]++ } .原创 2021-10-16 12:57:55 · 52 阅读 · 0 评论 -
3.插入排序
//插入排序:每次将遍历到的元素插入前面合适的位置 //复杂度:时间O(n2) 空间O(1) //交换次数O(n2) //稳定性:稳定 function insertSort(arr){ let tmp; for (let i=0;i<arr.length;i++){ tmp=arr[i]//当前遍历到的元素 //插入到合适的位置 for (let j=i;j>0;j--){ if (arr[j]<ar原创 2021-10-16 12:56:27 · 52 阅读 · 0 评论 -
2.选择排序
//选择排序:每次在未排序的部分选择最小的一个加入已经排序的数组中 //复杂度:时间O(n2) 空间O(1) //交换次数:O(n) //稳定性:不稳定 function chooseSort(arr){ let min,minIndex; for (let i=0;i<arr.length;i++){ min=arr[i] for (let j=i+1;j<arr.length;j++){ if (arr[j]<m.原创 2021-10-16 12:53:25 · 59 阅读 · 0 评论 -
1.冒泡排序
//冒泡排序:每次把最大的数字交换到数组末尾 //复杂度:时间:O(n2) 空间O(1) //交换次数:O(n2) //稳定性:稳定 //flag用于优化 function bubbleSort(arr){ let flag=false;//做优化,当本次没有交换过数据,那么数组是排好序的情况,不再进行交换 let tmp;//交换数组时中间变量 for (let i=0;i<arr.length;i++){ for (let j=0;j<arr.len.原创 2021-10-16 12:51:55 · 46 阅读 · 0 评论