交换排序算法:
一、冒泡法:
/*
冒泡排序,算法时间复杂度为:O(n^2),稳定的排序算法
Written by: Qinchao
Time:2016/12/3
Language: C++
*/
void bubblesort_6(vector<int> &_snum, int _len)
{
int temp;
for (int i = 0; i < _len; i++)
for (int j = i+1; j < _len; j++)
if (_snum[j] < _snum[j-1])
{
temp = _snum[j];
_snum[j] = _snum[j-1];
_snum[j-1] = temp;
}
}
二、鸡尾酒排序算法,又称双向冒泡排序:
/*
鸡尾酒排序(双向冒泡排序),算法时间复杂度为:O(n^2), 稳定排序
Written by: Qinchao
Time:2016/12/3
Language: C++
*/
void shakersort_7(vector<int> &_snum, int _len)
{
int left = 0, right = _len - 1;
int temp = 0;
int state = 0;
while (left < right)
{
for (int i = left+1; i <= right; i++)
{
if (_snum[i] < _snum[i - 1])
{
temp = _snum[i];
_snum[i] = _snum[i - 1];
_snum[i - 1] = temp;
state = i - 1;
}
}
right = state;
for (int i = right; i > left; i--)
{
if (_snum[i] < _snum[i - 1])
{
temp = _snum[i];
_snum[i] = _snum[i - 1];
_snum[i - 1] = temp;
state = i;
}
}
left = state;
}
}
三、快速排序算法
/*
快速排序,算法时间复杂度为:O(nlogn), 不稳定排序
Written by: Qinchao
Time:2016/12/3
Language: C++
*/
int partion(vector<int> &_num, int left, int right)
{
int x = _num[right];
int i = left - 1;
int temp;
for (int j = left; j < right; j++)
{
if (_num[j] <= x)
{
i++;
temp = _num[j];
_num[j] = _num[i];
_num[i] = temp;
}
}
temp = _num[i + 1];
_num[i + 1] = _num[right];
_num[right] = temp;
return i + 1;
}
void quicksort_8(vector<int> &_snum, int left, int right)
{
if (left < right)
{
int q = partion(_snum, left, right);
quicksort_8(_snum, left, q - 1);
quicksort_8(_snum, q + 1, right);
}
}