排序算法:快速排序

来源:互联网 发布:滨州大数据产业园 编辑:程序博客网 时间:2024/06/01 09:09

快速排序采用分治递归的思想,首先选取一个参考元素(比如第一个元素),然后将剩余的元素分成两部分:一部分所有元素都小于参考元素,一部分所有元素都大于参考元素,然后将参考元素插入到分界点;对于分开的两部分,递归采用同样的方法获取分类,最终将获取到完整排序的数列。


C++实现代码:

#include <iostream>#include <vector>using namespace std;template<typename T>void QuickSort(int minIdx, int maxIdx, vector<T> &vec);int main(){int arr[] = { 8, 3, 10, 49, 2, 6, 13, 5, 14, 7, 51, 53, 55 };vector<int> vec(&arr[0], &arr[13]);QuickSort(1, vec.size(), vec);for (int vIdx = 0; vIdx < vec.size(); vIdx++){cout << "value in " << vIdx << " is " << vec[vIdx] << endl;}return 0;}template<typename T>void QuickSort(int minIdx, int maxIdx, vector<T> &vec){int VSize = vec.size();if ((VSize < 1) || (minIdx <= 0) || (minIdx > VSize) || (maxIdx < 0) || (maxIdx > VSize) || (maxIdx <= minIdx))return;if (1 == VSize){cout << "Only one element in vector: " << vec[0] << endl;return;}if (minIdx == maxIdx - 1){if (vec[minIdx - 1] > vec[minIdx]){vec[minIdx - 1] ^= vec[minIdx];vec[minIdx] ^= vec[minIdx - 1];vec[minIdx - 1] ^= vec[minIdx];}}else{int firstPos = minIdx;for (int vIdx = minIdx; vIdx < maxIdx; vIdx++){if (vec[minIdx - 1] > vec[vIdx]){if (firstPos < vIdx){vec[firstPos] ^= vec[vIdx];vec[vIdx] ^= vec[firstPos];vec[firstPos] ^= vec[vIdx];}firstPos++;}}if ((minIdx < firstPos) || (firstPos > maxIdx)){vec[firstPos - 1] ^= vec[minIdx - 1];vec[minIdx - 1] ^= vec[firstPos - 1];vec[firstPos - 1] ^= vec[minIdx - 1];}QuickSort(minIdx, firstPos - 1, vec);QuickSort(firstPos + 1, maxIdx, vec);}return;}


0 0
原创粉丝点击