快速排序思想逻辑
- 在数据集之中,选择一个元素作为”基准”(pivot)
- 所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边
- 对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止
快速排序代码
#include<iostream>
using namespace std;
void Quicksort(int32_t numList[], int32_t left, int32_t right) {
if (left >= right) {
return;
}
auto leftTmp = left;
auto rightTmp = right;
auto tmp = numList[left];
while (rightTmp > leftTmp) {
while (rightTmp > leftTmp && numList[rightTmp] > tmp) {
rightTmp--;
}
if (rightTmp > leftTmp) {
numList[leftTmp] = numList[rightTmp];
leftTmp++;
}
while (rightTmp > leftTmp && numList[leftTmp] < tmp) {
leftTmp++;
}
if (rightTmp > leftTmp) {
numList[rightTmp] = numList[leftTmp];
rightTmp--;
}
}
numList[leftTmp] = tmp;
Quicksort(numList, left, leftTmp - 1);
Quicksort(numList, rightTmp + 1, right);
}
void main() {
int32_t numList[] = { 6,1,2,7,9,3,4,5,10,8 };
int32_t count = sizeof(numList) / sizeof(numList[0]);
Quicksort(numList, 0, count - 1);
}
返回排序算法分析总结