当前位置: 首页 > news >正文

基础算法(3):排序(3)插入排序

1.插入排序实现

     插入排序的工作原理是:通过构建有序序列,对于未排序数据,在已经排序的序列从后向前扫描,找到位置并插入,类似于平时打扑克牌时,将牌从大到小排列,每次摸到一张牌就插入到正确的位置。

     实现逻辑:

  (1)从第一个元素出现,该元素认为已经被排好序

  (2)取出下一个元素,在已经排序的序列中从后向前扫描

    (3)如果扫描到某个元素大于取出的新元素,将该元素移到下一个位置

  (4)重复(3),直到找到已排序的元素小于或者等于新元素的位置

  (5)将新元素插入到该位置后面

  (6)重复(2)-(5)

     代码实现:

void insertSort(int* arr,int len)
{for(int i=i;i<len;i++){int cur=arr[i];int j=i-1;while(j>=0&&arr[j]>cur){arr[j+1]=arr[j];j--;}arr[j+1]=cur;}
}

2.插入排序的时间复杂度

     问题规模仍然为n,最好情况是序列是升序,这样只需要比较n-1次,最坏情况是序列是降序,需要比较n(n-1)次,所以时间复杂度为O(n^2)

3.leetcode题目

3.1 删除某些元素后的数组均值

void insertionSort(int *a ,int n){int i,j;int tmp ;for(i = 1; i < n; ++i){for(j = i - 1; j>=0; --j){if(a[j] > a[j+1]){tmp = a[j];a[j] = a[j+1];a[j+1] = tmp; }}}
}
double trimMean(int* arr, int arrSize){insertionSort(arr,arrSize);int cnt = arrSize / 20;double count = 0;for(int i = cnt; i < arrSize - cnt; ++i){count += arr[i];}return count /  (arrSize - 2*cnt);
}

3.2  去掉最低工资和最高工资后的工资平均值

double average(int* salary,int salarySize){for (int i = 1; i < salarySize; i++) {int tmp = salary[i];int j = i - 1;for (; j >= 0 && tmp < salary[j]; j--) {salary[j + 1] = salary[j];}salary[j + 1] = tmp;}double ans=0;for(int i=1;i<salarySize-1;i++){ans+=salary[i];}return ans/(salarySize-2); 
}

3.3 学生分数的最小差值

int minimumDifference(int* nums, int numsSize, int k) {for (int i = 1; i < numsSize; i++){int tmp = nums[i];int j = i - 1;for (; j >= 0 && tmp < nums[j]; j--) {nums[j + 1] = nums[j];}nums[j + 1] = tmp;}int ret=100000;for(int i=0;i+k-1<numsSize;i++){int ans=nums[i+k-1]-nums[i];if(ans<ret){ret=ans;}}return ret;
}
http://www.lryc.cn/news/260364.html

相关文章:

  • Vue3-18-侦听器watch()、watchEffect() 的基本使用
  • mysql 5.7.34升级到5.7.44修补漏洞
  • 基于电子密码锁具有掉电存储系统设计
  • 清华大学考研复试上机题之二叉树的遍历
  • java全栈体系结构-架构师之路(持续更新中)
  • 【C语言】超详解strncpystrncatstrncmpstrerrorperror的使⽤和模拟实现
  • 【Spring Boot 】Spring Boot 常用配置总结
  • Day60力扣打卡
  • Axure的动态图使用以及说明
  • 力扣 | 437. 路径总和 III
  • 如何部署自己的服务渲染页面为Pdf文档
  • 常用的调试方法(段错误产生原因)
  • [云原生] Docker 入门指南:镜像、容器、卷和网络解析
  • 机器学习-聚类问题
  • leetcode9.回文数java解法
  • 图论专栏一《图的基础知识》
  • 得帆云为玉柴打造CRM售后服务管理系统,实现服务全过程管理|基于得帆云低代码的CRM案例系列
  • 智能优化算法应用:基于蝠鲼觅食算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • vue2 以及 vue3 自定义组件使用 v-model使用默认值以及自定义事件
  • 《PCL多线程加速处理》-滤波-统计滤波
  • 插入排序——直接插入排序和希尔排序(C语言实现)
  • 【Linux系统化学习】进程地址空间 | 虚拟地址和物理地址的关系
  • Navicat 技术指引 | 适用于 GaussDB 分布式的模型功能
  • 四十五、Redis主从
  • Spring源码学习一
  • 小红书种草和抖音传播区别是什么?
  • 论文阅读《Parameterized Cost Volume for Stereo Matching》
  • 解决nuxt3中vue3生命周期钩子onMounted不执行的问题
  • Win32 HIWORD和LOWORD宏学习
  • Axure官方软件安装、汉化保姆级教程(带官方资源下载)