思想
分治法,交换
过程
从数列中取出一个数作为基准数
将比这个数大的数全放在他的右边,小于或等于它的数全放在他的左边
再对左右区间重复第二步,直到各区间只有一个数。
代码(C)
两种实现思路: 交换法(基准不动), 挖坑填数法
//交换法实现的quicksort
void quicksort(int arr[], int left, int right)
{
if (left >= right)//注意要写这个递归跳出的条件
return;
int i = left;
int j = right;
int key = arr[left];
while (i < j){
while(i < j && arr[j] >= key)
j--;
while(i < j && arr[i] <= key)
i++;
if (i < j)
swap(&arr[i], &arr[j]);
}
swap(&arr[left], &arr[i]);
quicksort(arr, left, i-1);
quicksort(arr, i+1, right);
}
//挖坑填数法实现的quicksort
void quicksort(int arr[], int left, int right)
{
if (left >= right)
return;
int i = left;
int j = right;
int key = arr[left];
while (i < j){
while (arr[j] >= key && i < j)
j--;
arr[i] = arr[j];
while (arr[i] <= key && i < j)
i++;
arr[j] = arr[i];
}
arr[i] = key;
quicksort(arr, left, i-1);
quicksort(arr, i+1, right);
}