OJ中常用的功能函数(排序)
2014-08-14 17:31
253 查看
1.快速排序(不稳定)
int Partition(vector<int> &v, int p, int r)
{
int x = v[r];//选取最后一个元素作为参照
int i = p - 1, j = p;
for(; j < r; j++)
{
if(v[j] <= x)
{
i++;
swap(v[j], v[i]);
}
}
swap(v[r], v[i+1]);
return i+1;
}
void QuickSort(vector<int> &v, int p, int r)
{
int q;
if(p < r)
{
q = Partition(v, p, r);
QuickSort(v, p, q - 1);
QuickSort(v, q + 1, r);
}
}
时间复杂度:最坏O(n^2),平均O(nlgn),空间复杂度O(1)。
2. 最快的稳定排序(归并排序)
//将两个有序部分(left——mid,mid+1——right)合并
void Merge(vector<int> &v, int left, int mid, int right)
{
vector<int> temp;
int i = left, j = mid + 1, k;
while(i <= mid && j <= right)
{
if(v[i] <= v[j])
temp.push_back(v[i++]);
else
temp.push_back(v[j++]);
}
while(i <= mid)
temp.push_back(v[i++]);
while(j <= right)
temp.push_back(v[j++]);
for(k = 0; k < temp.size(); k++)
v[left + k] = temp[k];
}
void MergeSort(vector<int> &v, int p, int r)
{
int mid;
if(p < r)
{
mid = (p + r) / 2;
MergeSort(v, p, mid); //分解部分
MergeSort(v, mid + 1, r);
Merge(v, p, mid, r);
}
}
时间复杂度:最坏、平均复杂度:O(nlogn),空间复杂度:O(n)。
int Partition(vector<int> &v, int p, int r)
{
int x = v[r];//选取最后一个元素作为参照
int i = p - 1, j = p;
for(; j < r; j++)
{
if(v[j] <= x)
{
i++;
swap(v[j], v[i]);
}
}
swap(v[r], v[i+1]);
return i+1;
}
void QuickSort(vector<int> &v, int p, int r)
{
int q;
if(p < r)
{
q = Partition(v, p, r);
QuickSort(v, p, q - 1);
QuickSort(v, q + 1, r);
}
}
时间复杂度:最坏O(n^2),平均O(nlgn),空间复杂度O(1)。
2. 最快的稳定排序(归并排序)
//将两个有序部分(left——mid,mid+1——right)合并
void Merge(vector<int> &v, int left, int mid, int right)
{
vector<int> temp;
int i = left, j = mid + 1, k;
while(i <= mid && j <= right)
{
if(v[i] <= v[j])
temp.push_back(v[i++]);
else
temp.push_back(v[j++]);
}
while(i <= mid)
temp.push_back(v[i++]);
while(j <= right)
temp.push_back(v[j++]);
for(k = 0; k < temp.size(); k++)
v[left + k] = temp[k];
}
void MergeSort(vector<int> &v, int p, int r)
{
int mid;
if(p < r)
{
mid = (p + r) / 2;
MergeSort(v, p, mid); //分解部分
MergeSort(v, mid + 1, r);
Merge(v, p, mid, r);
}
}
时间复杂度:最坏、平均复杂度:O(nlogn),空间复杂度:O(n)。
相关文章推荐
- OJ中常用的功能函数(顺序数)
- oracle 常用功能函数汇总
- Oracle 最常用功能函数经典汇总
- javascript的一些常用功能函数
- JavaScript常用功能函数
- 一些常用的PHP功能函数(一)-- 消息窗口
- Oracle 最常用功能函数经典汇总
- ASP采集程序常用功能函数
- ZT: Oracle 最常用功能函数经典汇总
- 第10章 常用功能及函数集;客户端IP地址
- 一些常用的JS功能函数代码
- 我在开发过程总结的一套实现常用功能的函数
- VB常用功能函数小结
- 图形化编程常用函数功能介绍
- arx常用的一些函数功能表
- Oracle 最常用功能函数经典汇总 (zz)
- JavaScript常用功能函数
- ASP常用的几个功能模块封装成函数调用(登录验证,状态切换。。) http://www.tsingfeng.com/archives/?article-89.html
- 一些常用的JS功能函数(一) (2009-06-04更新)
- arx常用的一些函数功能表 【转】