zoukankan      html  css  js  c++  java
  • 快排(递归排序模板)

    操作

    1.找到一个枢纽pivotkey ,对于一个一次操作让枢纽左边的值都小于等于pivotkey,枢纽右边的值都大于等于pivotkey

    2.一个排序后将该区间分成两部分继续递归排序,直至不符合l<R;

    注意对于默认枢纽为第一个元素,你也可以找到 low-high中人一个当作枢纽然后与第一个进行交换



    #include<stdio.h>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<iostream>
    #include<cstdlib>
    #include<time.h>
    #define INF 0x3f3f3f3f
    #define N 10010
    using namespace std;
    template<typename T>
    void Oneqsort(T *arr,int low,int high)
    {
        if(low>=high)
         return;
        T pivotkey;
        int l,r;
        l=low;
        r=high;
        pivotkey=arr[l];
        while(l<r)
        {
            while(l<r&&(!(arr[r]<pivotkey)))r--;
            arr[l]=arr[r];
            while(l<r&&(!(pivotkey<arr[l]))) l++;
            arr[r]=arr[l];
        }
        arr[r]=pivotkey;
        Oneqsort(arr,low,r-1);
        Oneqsort(arr,r+1,high);
    }
    template <typename T>
    void QuickSort(T *arr,int la)//数组首地址 数组长度
    {
        Oneqsort(arr,0,la-1);
    }
    template <typename T>
    void Print(T* arr,int len)
    {
        for(int i=0;i<len;i++)
            cout<<arr[i]<<" ";
        cout<<endl;
    }
    int arr[N];
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
             srand(time(NULL));
             for(int i=0;i<n;i++)
             {
                 arr[i]=rand()%1000;
             }
    
    
             Print(arr,n);
             printf("after......
    ");
             QuickSort(arr,n);
             Print(arr,n);
        }
    }
    

  • 相关阅读:
    利用书签栏作插入时失败告终
    组以逗号分隔的子串及跨平update join
    ms_sql:drop and create a job
    why dicePlayer cannot player with defy mb526
    好像国庆三天是可以加班工资计了
    msssql 用numberic(38)替代int去解决int不够的问题
    C#的switch与二维数组.....
    某牛人所留的联系方式
    封装对象类
    数据库访问小列题
  • 原文地址:https://www.cnblogs.com/dchnzlh/p/9780064.html
Copyright © 2011-2022 走看看