快速排序和选择模版类

快速排序和选择模版类

template<typename T>
void insert_sort(T *array,int start,int end)
{for (int i = start + 1; i < end + 1; ++i) {int j = i - 1 ;T key = array[i];while (j >= start &&  key < array[j]){array[j+1] = array[j];j--;}array[j+1] = key;}
}
template <typename T>
KeyValuePair partition(T *array,int start,int end ,const T key)
{KeyValuePair line(start-1,start-1);for (int i = start; i < end + 1; ++i) {if(array[i] < key){line.key++;line.value++;T temp = array[i];array[i] = array[line.value];array[line.value] = array[line.key];array[line.key] = temp;}else if(array[i] == key){line.value++;array[i] = array[line.value];array[line.value] = key;}}return line;
}
template<typename T>
T select(T*array,int start,int end,int index)
{if(start == end) return array[start];const int constant_num = 5;int remainder = (end - start + 1) % constant_num;int zero = remainder == 0 ? 0 : 1;int num = (end - start + 1) / constant_num + zero;T *median = new T[num];if(remainder){insert_sort<T>(array,start + (num - 1 ) * constant_num,start + (num - 1 ) * constant_num + remainder-1);median[num-1] = array[start + (num - 1 ) * constant_num + (remainder - 1)/2];}for (int i = 0; i < num - zero; ++i) {insert_sort<T>(array,start + i * constant_num,start + (i+1) * constant_num - 1);median[i] = array[start + i * constant_num + constant_num / 2];}T key = select<T>(median,0,num-1,num/2 + (num % 2 == 0 ? 0 : 1));delete[] median;//划分int middle = partition<T>(array,start,end,key).value;//递归求解int position = middle - start + 1;if(index == position){return  array[middle];}else if(index < position){return select<T>(array,start,middle-1,index);}else{return select<T>(array,middle + 1,end,index - position);}
}
template<typename T>
void quick_sort(T *array,int start,int end)
{if(start<end){T median = select<T>(array,start,end,(end - start + 1)/2 + (end - start + 1)%2);KeyValuePair middle_line = partition<T>(array,start,end,median);quick_sort<T>(array,start,middle_line.key);quick_sort<T>(array,middle_line.value + 1,end);}
}

KeyValuePair类链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309049.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

造轮子-AgileConfig一个基于.NetCore开发的轻量级配置中心

微服务确实是行业的一个趋势&#xff0c;我自己也在把一些项目往微服务架构迁移。玩微服务架构配置中心是一个绕不过去的东西&#xff0c;有很多大牌的组件可以选&#xff0c;比如spring-cloud-config&#xff0c;apoll&#xff0c;disconf等等。而我为什么还要造一个轮子呢&am…

队列的定义与操作-顺序存储,链式存储(C语言)

顺序存储&#xff1a; typedef int Position; struct QNode {ElementType *Data; /* 存储元素的数组 */Position Front, Rear; /* 队列的头、尾指针 */int MaxSize; /* 队列最大容量 */ }; typedef struct QNode *Queue;Queue CreateQueue( int MaxSize ) {Que…

带权中位数-算法导论第三版第九章思考题9-2

带权中位数-算法导论第三版第九章思考题9-2 b 时间复杂度O(nlgn) float find_median_with_weights_b(float *array,int length) {quick_sort<float>(array,0,length-1);float sum 0;int index 0;while (sum < 0.5){sum array[index];index;}return array[index-1…

SQL Server 分页+json分享

1。SQL Server 版本2012 新增SQL分页的写法最近封装一个轻量级的ORM用到了分页&#xff0c;以前只知道使用Row_Number函数&#xff0c;现在发现sqlserver 新增的 {orderBy} offset {start} rows fetch next {pageSize} rows only 也挺好用的。简单回顾下 sqlserver 各个版本支持…

二叉树的存储结构及四种遍历(C语言)

二叉树的存储结构: typedef struct TNode *Position; typedef Position BinTree; /* 二叉树类型 */ struct TNode{ /* 树结点定义 */ElementType Data; /* 结点数据 */BinTree Left; /* 指向左子树 */BinTree Right; /* 指向右子树 */ };二叉树的四种遍历: void Inord…

Stack(栈 c++模版实现)

Stack(栈 c模版实现&#xff09; // // Created by XXX on 2021/7/10. //#ifndef C11LEARN_STACK_H #define C11LEARN_STACK_H template<typename T> class Stack{ private:int capacity;int top;T *array; public:Stack(int capacity 50);Stack(const Stack<T>&…

用十行代码快速创建权限管理系统

&#xff08;坚持做自己&#xff09;为了防止说是标题党&#xff0c;我先展示下真是就需要十行代码&#xff1a;当然还有appsettings.json配置文件&#xff0c;和种子数据文件&#xff0c;这个不算代码之内。1、项目背景介绍Blog.Core项目开源也两年了&#xff0c;经过了很多许…

编程中的一种特殊递归-尾递归

尾递归&#xff1a;在程序要返回的地方出现递归 从编译的角度来讲&#xff0c;尾递归都可以用循环来实现。 例子&#xff1a;二叉搜索树的查找操作Find递归函数可以写成循环的方式实现

Queue(队列 C++模版实现)

Queue&#xff08;队列 C模版实现&#xff09; #ifndef C11LEARN_QUEUE_H #define C11LEARN_QUEUE_H template<typename T> class Queue { private:int tail;int head;int capacity;T *array; public:Queue(int capacity 50);Queue(const Queue<T> &queue);Q…

ERP的配置管理实践

源宝导读&#xff1a;随着ERP系统的日益复杂&#xff0c;应用部署的方式越来越复杂&#xff0c;应用的配置也变得越来越庞杂&#xff0c;难以维护和管理。本文将介绍配置中心服务通过集中化、可离线的架构设计&#xff0c;解决ERP配置问题的实践经验。一、背景随着ERP业务的日益…

《LIO-SAM阅读笔记》1.IMU预积分模块

前言&#xff1a; LIO-SAM是一个多传感器融合的紧耦合SLAM框架&#xff0c;融合的传感器类型有雷达、IMU和GPS&#xff0c;其中雷达和IMU在LIO-SAM框架中必须使用的。LIO-SAM的优化策略采用了GTSAM库&#xff0c;GTSAM库采用了因子图的优化方法&#xff0c;其提供了一些列C的外…

EntityFramework Core 迁移忽略主外键关系

【导读】本文来源于一位公众号童鞋私信我的问题&#xff0c;在我稍加思索后给出了如下一种方案&#xff0c;在此之前我也思考过这个问题&#xff0c;借此机会我稍微看了下&#xff0c;目前能够想到的也只是本文所述方案。为何要忽略主外键关系我们不仅疑惑为何要忽略主外键关系…

Deque(双向队列 c++模版实现 算法导论第三版第十章10.1-5题)

Deque&#xff08;双向队列 c模版实现 &#xff09; 算法导论第三版第十章10.1-5题 #ifndef C11LEARN_DEQUE_H #define C11LEARN_DEQUE_H template<typename T> class Deque { private:int capacity;T*array;int head;int tail; public:Deque(int capacity 20);Deque(…

Java实现线性表(顺序表,链表)

顺序表: package seqTable;import java.util.ArrayList; import java.util.Scanner;public class SeqList {private int data[];private int len;private int maxSize;public SeqList(){data new int[100];maxSize 100;len 0;}public SeqList(int n){data new int[n];maxS…

你很可能需要知道这个调试小技巧

缘起 最近在调试的时候&#xff0c;需要观察第三方容器中每一个元素的值。默认情况下&#xff0c;vs 并不知道如何显示第三方容器的内容&#xff0c;只能手动观察容器中的每一个值&#xff0c;超级不方便。我找到一个非常给力的好办法&#xff0c;你还知道其它好办法吗&#xf…

List(C++模版实现的带哨兵的双向链表)

List(C模版实现的带哨兵的双向链表&#xff09; // // Created by 许加权 on 2021/7/10. //#ifndef C11LEARN_LIST_H #define C11LEARN_LIST_H template<typename T> class List { protected:class Node{public:Node *pre;Node *next;T key;Node(){}Node(const T key):k…

Java实现栈(顺序栈,链栈)

顺序栈&#xff1a; package SeqStack;public class Stack {private int top;private int base[];private int stackSize;public Stack(){stackSize 100;base new int[stackSize];top -1;}public Stack(int n){stackSize n;base new int[stackSize];top -1;}public bool…

全宇宙首本 VS Code 中文书,来了!

大家好&#xff01;我是韩骏&#xff0c;VS Code 中文社区创始人&#xff0c;VS Code 的代码贡献者。2013 年&#xff0c;毕业于上海交通大学软件学院&#xff0c;现在是微软开发平台事业部的软件工程师。写过 20 多款 VS Code 插件&#xff0c;其中最热门的 Code Runner 插件有…

用一个单链表L实现一个栈(算法导论第十章10.2-2题)

用一个单链表L实现一个栈&#xff08;算法导论第十章10.2-2题&#xff09; template<typename T> class HalfNode { public:T key;HalfNode* next; public:HalfNode(){next nullptr;};HalfNode(const T key):key(key){next nullptr;}; }; template<typename T> …

Java实现队列(循环队列,链队列)

循环队列: package SeqQueue;public class Queue {private int data[];private int queueSize;private int front,rear;public Queue(){data new int[100];queueSize 100;front rear 0;}public Queue(int n){queueSize n;data new int[queueSize];front rear 0;}publi…