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

                                    快速排序

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

    其他不啰说;

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

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

      假如 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;
    
    
    }

  • 相关阅读:
    GO语言常用标准库03---time包
    GO语言常用标准库02---os包
    GO语言常用标准库01---strings包
    GO语言复合类型05---递归
    GO语言练习---对切片进行排序
    GO语言复合类型04---映射
    GO语言复合类型03---切片
    GO语言复合类型02---数组
    [踩坑记录] windows10 应用商店打不开 代码: 0x80131500
    [Linux kali] Kali KDE桌面安装中文输入法 不能登录系统
  • 原文地址:https://www.cnblogs.com/2013lzm/p/3379569.html
Copyright © 2011-2022 走看看