zoukankan      html  css  js  c++  java
  • 快速排序

    快速排序是交换排序的一种,下面是快速排序的一些特征:

    • 平均时间复杂度: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("
    ");
    }
    
    
  • 相关阅读:
    路由基础、多app共存,路由分配、路由分发(将app自己的路由分发给应用自身管理)、反解
    Django项目的创建与介绍,三件套,静态文件,配置Mysql完成数据迁移,单表ORM记录的增删改查
    Django框架导读
    Flask简易版本、Ajax、DOM操作,表单操作
    JQuery
    0820-信心赛
    codeforces比赛总(吐)结(嘈)
    洛谷P3403 跳楼机(最短路)
    求逆序对的三种方法
    NKOJ 3751 扫雷游戏
  • 原文地址:https://www.cnblogs.com/qijinzhi/p/quick_sort.html
Copyright © 2011-2022 走看看