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

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 
     5 using namespace std;
     6 
     7 int z[100],n;
     8 
     9 //快速排序的思想是递归
    10 //以当前区间中的某个元素为基准 将比它小的放到前面 比它的放到后面 这样之后可以分而治之 因为以它为一个值的分界已经将比它小的放到了前半部分 比它大的放到了后面部分 这样便可以又对前半部分和后半部分执行同样的递归操作 最终完成排序
    11 
    12 void qsort(int a,int b)//当前要处理a-b这个区间
    13 {
    14     int c=a,d=b;
    15     int e=z[(a+b)>>1];//e是基准值 我们取这个区间中间的值作为基准值 当然其他的值也可以
    16     int f;//f仅作为交换元素时的一个辅助变量
    17     while(c<=d)//如果中间还有一段没有处理
    18     {
    19         while(z[c]<e) 
    20             c++;//找到一个大于等于基准值的数
    21         while(z[d]>e) 
    22             d--;//找到一个小于等于基准值的数
    23         if(c<=d)//如果较大的那个数在较小的那个数之前 我们就需要交换这两个数的位置
    24         {
    25             f=z[c];
    26             z[c]=z[d];
    27             z[d]=f;//交换
    28             c++;
    29             d--;
    30         }
    31     }
    32     //这样做完一次之后 我们可以保证 (d+1)到(c-1)这个区间内的元素是有序的
    33     if(c<b) qsort(c,b);//处理左边还未排序的区间
    34     if(a<d) qsort(a,d);//处理右边还未排序的区间
    35 }
    36 
    37 int main()
    38 {
    39     scanf("%d",&n);//读入有多少个数
    40     for (int a=1;a<=n;a++)
    41         scanf("%d",&z[a]);//读入每一个数
    42     qsort(1,n);//我们需要处理1-n这个区间里的所有数
    43     //sort(z+1,z+n+1);//这是c++自带的那个函数 需要在前面加上 #include<algorithm>
    44     for (int a=1;a<=n;a++)
    45         printf("%d\n",z[a]);//输出
    46 
    47     return 0;
    48 }
  • 相关阅读:
    Http状态吗504问题复盘
    Http状态码502问题复盘
    Nginx服务的基本配置
    mysql修改root密码
    centos7开启80端口及其他端口
    tp5隐藏入口文件(基于nginx)
    使nginx支持pathinfo模式
    laravel-admin 上传图片过程中遇到的问题
    Maven介绍
    java中泛型
  • 原文地址:https://www.cnblogs.com/zhonghaoxi/p/2708933.html
Copyright © 2011-2022 走看看