交换排序算法:
一、冒泡法:
/* 冒泡排序,算法时间复杂度为: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); } }