- 插入排序
思路:从0位置开始,每次遍历取下一位数字找到之前的合适位置插入构建一个有序数组,直到遍历结束得到一个完整的有序数组。function s(arr){ for(let i=0;i<arr.length-1;i++){ for (let j=i+1;j>=0;j--) { if(arr[j]<arr[j-1]){ const t=arr[j-1] arr[j-1]=arr[j] arr[j]=t } else { break } } } return arr }
- 快速(二分)排序
思路:找到数组的中间位置,一分为两个数组,比中间位置数字小的,放在左数组,大的放右数组,以递归的形式直到将数组拆分为最小单元function s(arr){ if (arr.length<=1) return arr const mid = Math.floor(arr.length/2) const midV = arr.splice(mid, 1) const left=[],right=[] for(let i=0;i<arr.length;i++){ if (arr[i]<=midV){ left.push(arr[i]) }else { right.push(arr[i]) } } return s(left).concat(midV, s(right)) }
- 冒泡排序
思路:从0位置开始,和后续的所有数字进行比较,如果比较位的数字比当前位数字小,互换位置,以达到将最大的数字从最左侧冒泡到最右侧function s(arr){ for(let i=0;i<arr.length-1;i++){ for(let j=i+1;j<arr.length;j++){ if (arr[i]>arr[j]){ const t=arr[i] arr[i]=arr[j] arr[j]=t } } } console.log(arr) }
- 选择排序
思路:从0位置开始,在后续位置选择出最适合当前数字的位置,一次和后续数字进行比较,记录下比当前位置还小的索引,将当前位置的数字和最小位置的数字互换function s(arr) { for(let i=0;i<arr.length-1;i++){ let min=i for(let j=i+1;j<arr.length;j++){ if (arr[min]>arr[j]){ min=j } } if (i!=min){ const t=arr[i] arr[i]=arr[min] arr[min]=t } } console.log(arr) }
排序算法
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...