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

      我用自己的语言来阐述快速排序.希望没有基础的人也能看懂.

      快速排序的主要是思想是:

      1.找个参考数,把比它大的数放到右边,比它小的数放到左边;

      2.递归

      

      关于找参考数,没有比较死的规定,一般取第一个,也可以取其它的,比如中间的数.

      代码如下,注释比较详细.

    代码:

    #include<stdio.h>
    #include<stdlib.h>
    
    void q_sort(int a[], int startIndex, int endIndex);
    
    int main(int argc, char **argv)
    {
        int i;
        int a[] = {3,1,4,7,11,2};
        
        printf("排序之前:
    ");
        for(i = 0; i < 6; ++i)
        {
            printf("%d ", a[i]);
        }
        printf("
    ");
    
        q_sort(a, 0, 5);
        
        printf("排序之后:
    ");
        for(i = 0; i < 6; ++i)
        {    
            printf("%d ", a[i]);
        }
        printf("
    ");
        
        exit(0);
    }
    
    void q_sort(int a[], int startIndex, int endIndex)
    {
        int midOne = a[startIndex];//选第一个作为参考点
        int i = startIndex, j = endIndex;
        if(i < j)//这个判断是递归结束的依据,不加的话会导致堆栈溢出
        {
            while(i < j)
            {
                for(; i < j; j--)
                if(a[j] < midOne)//小于参考点的数移到左边
                {
                    a[i++] = a[j];
                    break;
                }
                for(; i < j; i++)
                if(a[i] > midOne)//大于参考点的数移到右边
                {
                    a[j--] = a[i];
                    break;
                }
            }
        
            a[i] = midOne;//参考点归位
    
            //把参考点左右的部分分别进行快排
            q_sort(a, startIndex, i - 1);
            q_sort(a, i + 1, endIndex);
        }
    }

    输出结果:

    排序之前:
    3 1 4 7 11 2 
    排序之后:
    1 2 3 4 7 11 

    快速排序的时间复杂度:平均O(n*log(n)),最坏O(n^2);

    快速排序的空间复杂度:平均O(logn),最坏O(n)

  • 相关阅读:
    nginx搭建文件服务器配置文件
    VS code
    UNIX 网络编程学习
    局域网内的一些计算机可以ping通 有些ping不同
    Cfree clion windows c语言 socket 网络编程
    查找文件
    select * from 后有多个表的使用方法
    linux安装git方法
    Xshell中文乱码怎么处理?
    linux 逻辑卷管理 /dev/mapper/VolGroup-lv_root 100%调整分区大小
  • 原文地址:https://www.cnblogs.com/HpuAcmer/p/4138457.html
Copyright © 2011-2022 走看看