排序算法——快速排序
参考:http://blog.csdn.net/v_JULY_v/article/details/6116297
一、快速排序算法的基本特性
时间复杂度:O(n*lgn)
最坏:O(n^2)
空间复杂度:O(n*lgn)
不稳定。
快速排序时基于分治模式处理的,
对一个典型子数组A[p...r]排序的分治过程为三个步骤:
1.分解:
数组分为两个子数组
A[p ..q-1] <= A[q] <= A[q+1 ..r]
2.解决:递归,对子数组A[p ..q-1]和A[q+1 ..r]排序。
3.合并。
http://blog.csdn.net/einstein991225/article/details/7422556
int partition(int arr[], int left, int right) { int i = left, j = right; int tmp; int pivot = arr[(left + right) / 2]; while (i <= j) { while (arr[i] < pivot) i++; while (arr[j] > pivot) j--; if (i <= j) { tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; i++; j--; } }; return i; } void quickSort(int arr[], int left, int right) { int index = partition(arr, left, right); if (left < index - 1) quickSort(arr, left, index - 1); if (index < right) quickSort(arr, index, right); }