快速排序

Posted qijinzhi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序相关的知识,希望对你有一定的参考价值。

下面是快速排序的一些特征:

  • 平均时间复杂度:O(nlog2n)
  • 最坏情况:O(n^2)
  • 最好情况:O(nlog2n)
  • 平均空间复杂度:O(log2n)
  • 最坏情况:O(n)
  • 最好情况:O(log2n)
  • 是否稳定:不稳定

快速排序的一次划分会将一个元素放到排好序的最终位置上

下面是快速排序的代码:

/**
* arr  为需要排序的数组名
* low  为起始元素下标
* high 为末尾元素下标
*/
void quick_sort(int arr[], int low, int high)
{
    if (low < high) {
        int pivotPos = partitionf(arr, low, high);  // 将一组数划分为两组
        quick_sort(arr, low, pivotPos-1);
        quick_sort(arr, pivotPos+1, high);
    }
}
/**
* 划分函数,执行一次,将一个元素放到最终位置
* 并返回这个元素的索引,作为划分的位置
*/
int partitionf(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;
}

测试代码,可直接复制后编译执行:

#include <stdio.h>

void quick_sort(int *, int, int);
int  partitionf(int *, int, int);
void show(int *, int);

int main()
{
    int n = 4;
    int arr[] = {7, 10, 11, 9};
    quick_sort(arr, 0, n-1);
    show(arr, n);
    return 0;
}

/**
* arr  为需要排序的数组名
* low  为起始元素下标
* high 为末尾元素下标
*/
void quick_sort(int arr[], int low, int high)
{
    if (low < high) {
        int pivotPos = partitionf(arr, low, high);  // 将一组数划分为两组
        quick_sort(arr, low, pivotPos-1);
        quick_sort(arr, pivotPos+1, high);
    }
}
/**
* 划分函数,执行一次,将一个元素放到最终位置
* 并返回这个元素的索引,作为划分的位置
*/
int partitionf(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 show(int arr[], int len)
{
    int i;
    for (i=0; i<len; i++) {
        printf("%4d", arr[i]);
    }
    printf("
");
}

以上是关于快速排序的主要内容,如果未能解决你的问题,请参考以下文章

算法排序之堆排序

前端开发工具vscode如何快速生成代码片段

前端开发工具vscode如何快速生成代码片段

如何使用sublime代码片段快速输入PHP头部版本声明

代码片段如何使用CSS来快速定义多彩光标

vs2003:快速片段工具