与归并排序一样,开始排序也是使用了分治思想,他也分为三个步骤。
一、分解,将序列分为两个子序列,方法,随便指定一个数,将队列中所有大于这个数的作为一个子序列,小于这个数的作为另外一个子序列。
二、解决,通过递归对上面两个子序列排序。
三、合并,由于子序列都是原地址排序,所以已经是排序好的序列。
快速排序是一个效率很高的排序方法,中心思想是第一步的分解,掌握了分解方法,就掌握了这个排序。
C++示例:
/*
快速排序
*/
void quickSort(int arr[], int min, int max) {
if (min < max) {
int key = arr[max];
int i = min - 1;
for (int j = min; j < max; j++) {
if (arr[j] <= key) {
i = i + 1;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[i + 1];
arr[i + 1] = arr[max];
arr[max] = temp;
quickSort(arr, min, i);
quickSort(arr, i + 1, max);
}
}
/*
主函数(入口函数)
*/
int main(int argc, const char * argv[]) {
int arrA[10] = {12,321,42,53,562,11,4,45,63,543};
quickSort(arrA, 0, 9);
for (int i = 0; i < 10; i++) {
cout<< arrA[i] << " ";
}
cout<< endl;
return 0;
}
输出结果:
快速排序的时间复杂度度是:(nlgn)