十大经典排序算法有:
一、插入排序
(1)、直接插入排序:
/*
直接插入排序,算法时间复杂度为:O(n^2), 稳定的排序算法
Written by: Qinchao
Time:2016/12/3
Language: C++
*/
void insertsort_1(vector<int> &_snum, int _len)
{
int j = 0;
int temp = 0;
for (int i = 1; i < _len; i++)
{
j = i;
temp = _snum[i];
while (j > 0 && _snum[j - 1] > temp)
{
_snum[j] = _snum[j - 1];
j--;
}
_snum[j] = temp;
}
}
(2)、二分插入排序:
/*
二分直接插入排序,算法时间复杂度为:O(nlogn),稳定的排序算法
Written by: Qinchao
Time:2016/12/3
Language: C++
*/
void BiInsertsort_2(vector<int> &_snum, int _len)
{
int middle;
for (int i = 0; i < _len; i++)
{
int temp = _snum[i];
int left = 0;
int right = i - 1;
while (left <= right)
{
middle = (left + right) / 2;
(temp > _snum[middle]) ? (left=middle+1) : (right=middle-1);
}
for (int j = i; j > left; j--)
_snum[j] = _snum[j - 1];
_snum[left] = temp;
}
}
(3)、希尔排序:
/*
希尔排序,算法时间复杂度为:不定,不稳定的排序算法
Written by: Qinchao
Time:2016/12/3
Language: C++
*/
void shellsort_3(vector<int> &_snum, int _len)
{
int temp;
int gap = _len / 2;
while (gap)
{
for (int i = gap; i < _len; i++)
{
temp = _snum[i];
int j = i;
while (j >= gap && temp < _snum[j - gap])
{
_snum[j] = _snum[j - 1];
j--;
}
_snum[j] = temp;
}
gap /= 2;
}
}