排序算法

#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

 

 

posted on 2015-03-08 10:47  Andy Niu  阅读(216)  评论(0编辑  收藏  举报