c++ 快速排序 双指针
快速排序 —— 左右指针法的原理:
(1)设最右值为枢轴值
(2)从左往右扫描,发现大于枢轴值的就进行位置互换
(3)从右往左扫描,发现小于枢轴值的就进行位置互换
#include <iostream> #include <stdlib.h> using namespace std; /*******************************************/ /* 快速排序 —— 左右指针法 /******************************************/ void swap(int &a, int &b) //位置互换函数 { int temp = a; a = b; b = temp; } int Quick(int array[], int left, int right) //快速排序算法 { int key = right; //枢轴key,最右值 while (left < right) { while (left < right && array[left] <= array[key]) //从左扫描到右,发现>key就结束本次循环 { ++left; //最左值 } while (left < right && array[right] >= array[key]) //从右扫描到左,发现<key就结束本次循环 { --right; } swap(array[left], array[right]); //当前左>key值和右<key值进行交换 } swap(array[left], array[key]); //最后一次从左扫描到右,把>key值和key值进行交换 return left; } int main() { int a[10] = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]; QuickSort(a, 0, 9); } void QuickSort(int array[], int left, int right) //快速排序函数 { if (left < right) { int key = Quick(array, left, right); QuickSort(array, left, key - 1); QuickSort(array, key + 1, right); } }