排序---快速排序

前言

个人小记


一、代码

c 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_ARR 100000
#define swap(a,b)\
{\
    __typeof(a) __c=a;\
    a=b,b=__c;\
}
#define TEST(func ,arr,l,r)\
{\
    int n=r-l;\
    printf("test:%s\n",#func);\
    int *t=(int *)malloc(sizeof(int )*n);\
    memcpy(t,arr,n);\
    long long a=clock();\
    func(t,l,r);\
    long long b=clock();\
    if(check(t,n))printf("OK %lldms\n",(b-a)*1000/CLOCKS_PER_SEC);\
    else printf("FAIL\n");\
    free(t);\
}

int check(int *t,int n)
{
    for(int i=1;i<n;i++)
    {
        if(t[i-1]>t[i])return 0;
    }
    return 1;
}

int* init_arr(int n)
{
    int* arr=(int*)malloc(sizeof(int)*n);
    for(int i=0;i<n;i++)arr[i]=rand()%100000;
    return arr;
}

void quick_sort(int *arr,int l,int r)
{
    if(r-l<=2)
    {
        if(r-l<=1)return ;
        if(arr[l]>arr[r-1])swap(arr[l],arr[r-1]);
        return ;
    }
    int a=l,b=r-1,z=arr[a];
    while(b>a)
    {
        while(b>a&&arr[b]>z)b--;
        if(b>a)arr[a++]=arr[b];
        while(b>a&&arr[a]<z)a++;
        if(b>a)arr[b--]=arr[a];
    }
    arr[a]=z;
    quick_sort(arr,l,a);
    quick_sort(arr,a+1,r);
    return ;
}

int main()
{
    srand((unsigned)time(0));
    int *arr=init_arr(MAX_ARR);

    TEST(quick_sort,arr,0,MAX_ARR);

    free(arr);
    return 0;
}

二、测试结果

c 复制代码
test:quick_sort
OK 6ms
相关推荐
CodeClimb13 分钟前
【华为OD-E卷-简单的自动曝光 100分(python、java、c++、js、c)】
java·python·华为od
风清云淡_A23 分钟前
【java基础系列】实现数字的首位交换算法
java·算法
Gao_xu_sheng26 分钟前
Java程序打包成exe,无Java环境也能运行
java·开发语言
涵涵子RUSH27 分钟前
合并K个升序链表(最优解)
算法·leetcode
大卫小东(Sheldon)33 分钟前
Java的HTTP接口测试框架Gatling
java
谢家小布柔34 分钟前
java中的继承
java·开发语言
爱吃西瓜的小菜鸡36 分钟前
【C语言】矩阵乘法
c语言·学习·算法
l1384942745140 分钟前
Java每日一题(2)
java·开发语言·游戏
苹果醋343 分钟前
SpringBoot快速入门
java·运维·spring boot·mysql·nginx
WANGWUSAN661 小时前
Python高频写法总结!
java·linux·开发语言·数据库·经验分享·python·编程