快排(递归排序模板)

操作

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......\n");
         QuickSort(arr,n);
         Print(arr,n);
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值