快速排序的主要思想:从一组数中首先任选一个数作为关键值,通过一次排序将小于和大于关键值的数据分成独立的两部分;再按这样的方法对这两部分数据分别进行快速排序,直至成有序数组。
快速排序的时间复杂度最好为O(nlogn), 最坏为O(n2), 平均时间复杂度为O(nlogn)。
快速排序是一种不稳定的排序算法。
在快速排序中用到了递归,这个需要好好理解。
C代码:
//快速排序, 按从小到大排序
void quick_sort(int array[], int left, int right) {
if(left > right) return;
int i = left; //将数组的左侧位置赋值给i
int j = right; //将数组的右侧位置赋值给j
int key = array[left]; //将数组起始位置的数作为关键值
while (i < j) {
//从数组的右侧开始寻找小于key的位置
while (i < j && key < array[j]) {
j--;
}
//交换j所在位置小于key的值
array[i] = array[j];
//从数组的基侧开始寻找大于key的位置
while (i < j && key >= array[i]) {
i++;
}
//交换i所在位置大于key的值
array[j] = array[i];
}
//将key值归位
array[i] = key;
quick_sort(array, left, i-1); //对左侧进行快速排序
quick_sort(array, i+1, right); //对右侧厚街快速排序
}
Python:
def quickSort(array, left, right):
if array is None:
return
if left > right:
return
i = left
j = right
key = array[left]
while i<j:
while i<j and key < array[j]:
j-=1
array[i] = array[j]
while i<j and key > array[i]:
i+=1
array[j] = array[i]
array[i] = key
quickSort(array, left, i-1)
quickSort(array, i+1, right)
PHP:
function quickSort(array &$array, $left, $right) {
if($left > $right) return;
$i = $left;
$j = $right;
$key = $array[$left];
while ($i < $j) {
while ($i < $j && $key < $array[$j] ) {
$j--;
}
$array[$i] = $array[$j];
while ($i < $j && $key > $array[$i]) {
$i++;
}
$array[$j] = $array[$i];
}
$array[$i] = $key;
quickSort($array, $left, $i-1);
quickSort($array, $i+1, $right);
}