【快速排序】

快速排序

  • 1.快速排序
  • 2.使用python实现
  • 2.使用C/C++实现

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); // 划分右半部分
    }

}

你可能感兴趣的:(基础知识,算法,算法,排序算法,数据结构)