#include <iostream> #include <stdio.h> #include <stdlib.h> #include <time.h> using namespace std; void swap(int& a, int& b) { int tmp = a; a = b; b = tmp; } void printArr(int* arr, int len) { for (int i = 0; i < len; i++) { printf("%d ", *(arr+i)); } } void randArr(int* arr, int len, int maxVal) { srand((int)time(0)); for (int i = 0; i < len; i++) { *(arr+i) = rand() % maxVal; } } int Partition(int* arr, int lowIndex, int highIndex) { // do something else int pivotVal = arr[highIndex]; // 最简单的,用区间最后一个记录作为枢纽 int i = lowIndex-1; // i指示的是要交换的位置索引 for (int j = lowIndex; j < highIndex; j++) { if (arr[j] < pivotVal) { ++i; swap(arr[i], arr[j]); } } swap(arr[i+1], arr[highIndex]); // 把 pivot 移动到它最后的地方 return i+1; } void QuickSort(int* arr, int low, int high) // 分治递归调用 { int pivotIndex; // 划分后的枢纽位置 if (low < high) { pivotIndex = Partition(arr, low, high); QuickSort(arr, low, pivotIndex-1); QuickSort(arr, pivotIndex+1, high); } } int main(int argc, char* argv[]) { int len = 30; int* arr = new int[len]; randArr(arr, len, 100); printf("before sort:/n"); printArr(arr, len); printf("/nafter quick sort:/n"); QuickSort(arr, 0, len-1); printArr(arr, len); printf("/n"); delete arr; return 0; } 运行结果: