排序算法
#ifndef SORT_H__
#define SORT_H__
#include <vector>
namespace Niuzb
{
namespace Algorithm
{
template<typename T>
void Swap(T& lhs,T& rhs)
{
T tmp(lhs);
lhs = rhs;
rhs = tmp;
}
template<typename T>
void BubbleSort(std::vector<T>& vec)
{
for(int i=0;i<vec.size();++i)
{
for(int j=0;j<vec.size()-i-1;++j)
{
if(vec[j] > vec[j+1])
{
Swap(vec[j],vec[j+1]);
}
}
}
}
template<typename T>
void InsertSort(std::vector<T>& vec)
{
for(int i =1;i<vec.size();++i)
{
int curIndex = i;
T target(vec[i]);
while(curIndex >0 && target<vec[curIndex-1])
{
vec[curIndex] = vec[curIndex -1];
--curIndex;
}
vec[curIndex] = target;
}
}
template <typename T>
void SelectSort(std::vector<T>& vec)
{
for(int i =0;i<vec.size();++i)
{
int minIndex = i;
for(int j =i+1;j<vec.size();++j)
{
if(vec[minIndex]>vec[j])
{
minIndex = j;
}
}
if(minIndex != i)
{
Swap(vec[minIndex],vec[i]);
}
}
}
template <typename T>
void QuickSort(std::vector<T>& vec,int left,int right)
{
int i = left;
int j = right-1;
if(i >= j)
{
return;
}
// 挖坑填数
T target(vec[i]);
while(i<j)
{
while(i<j && vec[j]>target)
{
--j;
}
if(i<j)
{
vec[i++] = vec[j];
}
while(i<j && vec[i]<target)
{
++i;
}
if(i<j)
{
vec[j--]=vec[i];
}
}
vec[i] = target;
QuickSort(vec,left,i);
QuickSort(vec,i+1,right);
}
template <typename T>
void QuickSort(std::vector<T>& vec)
{
QuickSort(vec,0,vec.size());
}
}
}
#endif
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人