排序算法02-快速排序
在待排序的N个数组元素中任取一个元素(通常取第一个元素)作为“基准值”—key;
定义待排序数组第1个元素的索引为leftIndex(首索引),最后1个元素的索引为rightIndex(尾索引);
首先,从rightIndex(尾索引)不断向前扫描数组元素,直到找到比key(基准值)小的元素,并替换leftIndex(首索引)对应的数组元素;
然后,从leftIndex(首索引)不断向后扫描数组元素,直到找到比key(基准值)大的记录,并替换rightIndex(尾索引)对应的数组元素;
若在向前扫描或者向后扫描数组元素过程中,首索引等于尾索引(leftIndex == rightIndex),则一轮排序结束,并且,将key(基准值)替换leftIndex(首索引)所对应的数组元素,待排序数组被分成两个区:[0,leftIndex-1],[righIndex+1,N];否则,一轮排序继续,继续执行步骤3和步骤4。
在一轮排序结束后,对两个分区重复执行步骤1~5;直到所有分区的数组元素都有序,快速排序算法结束。
时间复杂度:O(nlogn)。
空间复杂度:O(logn)。