码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法

时间:2015-03-08 11:41:52      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

#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

 

 

排序算法

标签:

原文地址:http://www.cnblogs.com/nzbbody/p/4321383.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!