十大经典排序算法有:
一、插入排序
(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; } }