介绍
快排是最快的通用内部排序算法, 不需要辅助空间 。快排分为如下步骤:
1. 选择一个基准数据P,找到该基准数据在顺序数组中的位置。
2. 对已确定位置的基准数据P左侧的数据分别确定位置。
3. 对已确定位置的基准数据P右侧的数据分别确定位置。
算法详解
以如下七个元素的数组为例:

首先,我们任选基准,但为了实际代码编写的方便,一般选择第一个或最后一个元素作为基准值。此时我们选择31作为基准值,记为P。
另外,我们记I作为元素下标,J作为循环次数。

I=-1,J=0时,arr[J]<=P【23<31】为真,则I=0,数组为

I=0,J=1时,arr[J]<=P【62>31】为假,则数组不变

I=0,J=2时,arr[J]<=P【75<31】为假,则数组不变

I=0,J=3时,arr[J]<=P【29<31】为真,则I=1,数组为

I=1,J=4,5,6时,arr[J]<=P为假,则数组不变

J=7,循环条件不符合,故循环终止,此时I=1,swap(arr[I+1],P),结果为

此时,P【31】左侧元素都比31小,右侧元素都比31大,31位置确定,再对31左右两侧元素依次确定位置即可。
代码
#include <iostream>
using namespace std;
void swap(int &i,int &j){
int tmp;
tmp = i;
i = j;
j = tmp;
}
int partition(int *arr,int high,int low){
int pivot = arr[high];
int i = low-1;
for(int j=low;j<high;j++){
if(arr[j]<=pivot){
i++;
swap(arr[i],arr[j]);
}
}
swap(arr[i+1],arr[high]);
return i+1;
}
void quickSort(int *arr,int high,int low){
if(low>=0&&low<high){
int index = partition(arr,high,low);
quickSort(arr,index-1,0);
quickSort(arr,high,index+1);
}
}
int main() {
int arr[8] = {59,32,62,74,21,92,39,67};
quickSort(arr,7,0);
return 0;
}
本文详细介绍快速排序算法,包括算法步骤、原理及实现代码。通过实例演示快排过程,讲解如何选择基准值,以及如何通过递归对基准值左右两侧元素进行排序。
58万+

被折叠的 条评论
为什么被折叠?



