活动地址:CSDN21天学习挑战赛 算法专区
一份耕耘,一份收获,付出就有回报永不遭遇过失败,因我所碰到的都是暂时的挫折。
…
作为一名前端攻城狮,为了成为更好的自己,我参加了这次21天算法打卡。
这是第6天,2022年08月14日,星期日。今天也要加油!
**
**
1,学习目标
今天掌握学习折半插入排序
2,学习内容
3,学习时间
第五天,2022.08.09 19:00-21:00
4,学习产出
CSDN技术博客 1 篇
**
**
1,学习知识点
折半插入排序(Binary Insertion Sort)是对插入排序算法的一种改进,所谓排序算法过程,就是不断的依次将元素插入前面已排好序的序列中。
由于在插入排序的过程中,已经生成了一个(排好的元素组成的)有序数列。所以在插入待排元素时可以使用折半查找的方式更快速的确定新元素的位置,当元素个数较多时,折半插入排序优于直接插入排序。
2,学习遇到的问题
1.javascript中不能直接写<=,所以改写了一下。
3,学习的收获
时间复杂度
空间复杂度
稳定性:稳定
4,实操
- 输入数据(input):11,34,20,10,12,35,41,32,43,14
- function binaryInsertionSort(arr){
- for (let i = 1;i < arr.length;i++){
- if (arr[i] < arr[i - 1]){
- let tmp = arr[i];
- let left = 0;
- let right = i - 1;
- while(left < right || left == right){
- let mid = Math.ceil((right - left) / 2 + left);
- if(arr[mid] > tmp){
- right = mid - 1;
- }else {
- left = mid + 1;
- }
- }
- for (let j = i - 1;j > right + 1||j == right+1 ;j--){
- arr[j + 1] = arr[j];
- }
- arr[right + 1] = tmp;
- }
- }
- return arr;
- }
- console.log(binaryInsertionSort([11,34,20,10,12,35,41,32,43,14]));//[10, 11, 12, 14, 20, 32, 34, 35, 41, 43]
打印输出:[10, 11, 12, 14, 20, 32, 34, 35, 41, 43]
…
今天就学习到这里,下次再见!~