
算法笔记02--排序算法
发布日期:2021-05-08 15:59:52
浏览次数:14
分类:精选文章
本文共 1632 字,大约阅读时间需要 5 分钟。
1.归并排序
归并排序将整体数组不断分成更小的数组,最终结果是所有数组中只含有一个元素,然后两两不断合并。时间复杂度为O(nlogn) 比如现在有数组{1,15,16,24,3,8,7,23} 第一次划分,{1,15,16,24},{3,8,7,23} 第二次划分,{1,15},{16,24},{3,8},{7,23} 第三次划分,{1},{15},{16},{24},{3},{8},{7},{23} 开始两两合并排序 第一次合并, {1,15},{16,24},{3,8},{7,23} 第二次合并,{1,15,16,24},{3,7,8,23} 第三次合并,{1,3,7,8,15,16,23,24} 归并排序中有着递归的思想,不断将数组划分成更小的数组,在这种递归的思想中不妨想一下划分的最终状态——数组中只含有一个元素,然后反过来向上推演。 归并排序关键函数如下:void Combine(int left,int middle,int right){ int i=left; int j=middle; int k=left; while(i<=middle&&j<=right){ //将分成的左右两部分合并比较大小 if(arr[i]<=arr[j]){ temp[k++]=arr[i++]; //将arr[i]与arr[j]中较小者存入到temp数组中 } else{ temp[k++]=arr[j++]; } } while(i<=middle){ //左边部分没有比较完,右边部分比较结束 temp[k++]=arr[i++]; //将左边部分直接全部存入temp数组中 } while(j<=right){ //右边部分没有比较完,坐边部分比较结束 temp[k++]=arr[j++]; //将左右部分直接全部存入temp数组中 } for(k=left;k<=right;k++){ //将temp数组中数据存入原数组 arr[k]=temp[k]; } return;}void MergeSort(int left,int right){ if(left
2.快速排序
快速排序首先需要选取一个pivot,每一次快速排序可以确定一个数的最终位置 比如现在有数组{15,16,24,1,3,8,7,23} 第一次快速排序:{7,8,3,1,15,24,16,23} 第二次快速排序:{1,3,7,8,15,23,16,24} 第三次快速排序:{1,3,7,8,15,16,23,24} 快速排序同样也是将一个大问题分解为更小的问题,时间复杂度为O(nlogn)void QuickSort(int arr[],int left,int right){ if(left=pivot) j--; //从右边开始不断将右指针左移,寻找到第一个小于pivot的数 if(i
快速排序练习题:寻找数组中第k小的数
寻找数组中第k小的数不用将整个数组进行排序,在快速排序算法的基础上,在每一次快排结束后进行一次判断即可int QuickSort(int arr[],int left,int right,int k){ if(left=pivot) j--; //从右边开始不断将右指针左移,寻找到第一个小于pivot的数 if(i k){ QuickSort(arr,left,i,k); //如果当前i的位置大于k,将i左半部分快速排序 } else{ QuickSort(arr,i+1,right,k); //如果当前i的位置小于k,将i右半部分快速排序 } } return arr[k];}
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年03月27日 09时47分47秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MVC中在一个视图中,怎么加载另外一个视图?
2019-03-06
SQL--存储过程
2019-03-06
MVC学习系列5--Layout布局页和RenderSection的使用
2019-03-06
MVC学习系列13--验证系列之Remote Validation
2019-03-06
多线程之volatile关键字
2019-03-06
2.1.4奇偶校验码
2019-03-06
2.2.2原码补码移码的作用
2019-03-06
多线程之Lock显示锁
2019-03-06
ForkJoinPool线程池
2019-03-06
【Struts】配置Struts所需类库详细解析
2019-03-06
Java面试题:Servlet是线程安全的吗?
2019-03-06
DUBBO高级配置:多注册中心配置
2019-03-06
Java集合总结系列2:Collection接口
2019-03-06
Linux学习总结(九)—— CentOS常用软件安装:中文输入法、Chrome
2019-03-06
大白话说Java反射:入门、使用、原理
2019-03-06
集合系列 Set(八):TreeSet
2019-03-06
JVM基础系列第11讲:JVM参数之堆栈空间配置
2019-03-06
MySQL用户管理:添加用户、授权、删除用户
2019-03-06
比技术还重要的事
2019-03-06
linux线程调度策略
2019-03-06