• 快速排序


                                    快速排序

      什么是快速排序?快速排序其实是一种排序方法。

    其他不啰说;

      基本原理:给出一堆无序的数,首先重这堆数值中一第一个数为标杆(其他数也可以不过为了方便编程就选着第一个数为标杆),标杆选出后,将这堆无序数分成两堆,比标杆小的分到一堆,比标杆大的分到另一堆,这样就有两堆数了。接着按照同样的方法为这两堆数进行快速排序。

      写代码时第一步,找出标杆,以标杆为中心将比标杆小的数放到标杆右边,比标杆大的放到左边;在分别进入左右两边进行快排;

      假如 start 为数组起点 end为数组终点 排序函数为sort();k 为标杆在数组中的下标;

      (1)sort(start,end)

      (2)sort(start,k-1)

      (3)sort(k+1,end)

     

     

     

     

     

    实例:

    给出数组为 3 1 2 6 4 



     

    //快速 排序
    //从一堆数中 那第一个数为标杆 把大于标杆的数放在标杆的左边,
    //把小于标杆的数放在标杆的右边。将数放好后分别进入左右子段
    //进行下一轮的快排 直到子段长度为1;
    #include<iostream>
    using namespace std;
    const int maxn=10;
    int number[maxn];
    int n;
    void sort(int start,int end)
    {
        if(start>=end)
            return;
        int i;//从右边移动
        int j;//从左边移动
        int k;//记录最后一个移动位置的数的位置;
        int mid;//标杆
        i=start;//该段的第一位为标杆 把第一个位空出来
        j=end;
        k=start;
    
        mid=number[start];
        while(i<j)//当i》=j时找到标杆的位置
        {
            for(j;j>i;j--)
            {
                if(number[j]<=mid)
                {
                    number[i]=number[j];//从左边往右找 找到一个比mid小的数 将它搬到右边i的位置
                    k=j;
                    break;
                }
            }
    
            for(i;i<=j;i++)
            {
                if(number[i]>mid)
                {
                    number[j]=number[i];//从右边往左边找 找到一个比mid大的数 将它搬到j的位置;
                    k=i;
                    break;
    
                }
            }
        
        
        }
        number[k]=mid;//把mid移动到最后一个空位;
        sort(start,k-1);//进入右子段 进行快速排序
        sort(k+1,end);//进入左子段 进行快速排序
    
    
    }
    int main()
    {
        int n;
        while(scanf("%d",&n),n)
        {
            printf("请输入n个数
    ");
            memset(number,0,sizeof(number));
            int i;
            for(i=1;i<=n;i++)
            {
                scanf("%d",&number[i]);
            
            }//输入数据
            sort(1,n);
            //进行快排
            printf("排序后结果
    ");
            for(i=1;i<=n;i++)
            {
                printf("%d ",number[i]);
            }
            printf("
    ");
            
    
        
        
        }
    
    
        return 0;
    
    
    }

  • 相关阅读:
    聊聊算法——回溯算法
    Redis高级用法
    聊聊算法——BFS和DFS
    这就是Java代码生成器的制作流程
    Spring Boot 2 实战:常用读取配置的方式
    Spring Security 实战干货:图解Spring Security中的Servlet过滤器体系
    想做时间管理大师?你可以试试Mybatis Plus代码生成器
    Maven中央仓库正式成为Oracle官方JDBC驱动程序组件分发中心
    作为一个Java开发你用过Jib吗
    使用反应式关系数据库连接规范R2DBC操作MySQL数据库
  • 原文地址:https://www.cnblogs.com/2013lzm/p/3379569.html
Copyright © 2020-2023  润新知