1.快速排序
快速排序的定义就不赘述了,其主要代码框架如下:
void sort(int[] nums, int lo, int hi) {
if (lo >= hi) {
return;
}
// 对 nums[lo..hi] 进行切分
// 使得 nums[lo..p-1] <= nums[p] < nums[p+1..hi]
int p = partition(nums, lo, hi);
// 去左右子数组进行切分
sort(nums, lo, p - 1);
sort(nums, p + 1, hi);
}
其主要思想就是先选定基准,使基准左边的元素全部小于它,右边的元素全部大于它(由小到大排序,反之亦然),类似于二叉树的先序遍历
参考链接:快速排序
2.使用python实现
def quickSort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2] #选定中间元素为基准
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quickSort(left) + middle + quickSort(right)
2.使用C/C++实现
// 用第一个元素将待排序序列化分为左右部分
int partition(int* arr, int low, int high){
int pivot = arr[low]; // 首元素作为基准
while(low < high){
while(low < high && arr[high] >= pivot) high--;
arr[low] = arr[high]; // 比基准小的元素移到左边
while(low < high && arr[low] <= pivot) low++;
arr[high] = arr[low]; // 比基准大的元素移到右边
}
arr[low] = pivot; // 基准元素放到最终位置
return low; // 返回基准元素索引
}
// 快速排序
void quickSort(int* arr, int low, int high){
if(low < high){
int pivot_pos = partition(arr, low, high); // 划分
quickSort(arr, low, pivot_pos-1); // 划分左半部分
quickSort(arr, pivot_pos+1, high); // 划分右半部分
}
}