• 排序算法——快速排序


    原理:文字说不清楚,直接在代码解释了

    [08:32:22] gcc quicksort.c 
    [08:32:24] ./a.out
    1 2 3 4 5 6 7 8 9 10 
    [08:32:26] cat quicksort.c 
    #include<stdio.h>
    void swap(int *a,int *b)//这个是交换懂吧,注意需要使用指针,否则只是使用a,b,对于数组的值是没有交换效果的
    {
        int t;
        t=*a;
        *a=*b;
        *b=t;
    }
    int  sort(int a[],int low,int high)//这个函数总体上的功能是一某一个数作为基础数,然后让其左边都比这个数小,右边都比这个数大
    {
        int tmp=a[low];//这里把传过来的范围(low~high),选a[low]作为那个基础数
        while(low<high)//如果low还比high小,说明还有些数没循环到,继续循环
        {
            while(low<high&&tmp<=a[high])//用基准数对比最后一个数,如果小于,说明这个数比基准数大,那么high-1让基准数跟倒数第二个比。。。,如果大于,那么就会跳出这个小循环,执行下一条语句swap,让它们互换位置
                high--;
            swap(&a[low],&a[high]);//此时a[high]比a[low]还小,这里的high就不需要再减去1了,因为前面可能还有比基准数大的,这个a[high]还需要进行交换位置呢
            while(low<high&&tmp>=a[low])//不废话,不懂的话就自己模拟执行过程吧
                low++;
            swap(&a[low],&a[high]);
        }
        return low;//需要返回一个数,也就是说以下标为low的数左右两边都已经排好
    }
    void quicksort(int a[],int low,int high)
    {
        if(low<high)//重复执行sort过程,直至low和high为相邻的两个数为止
        {   
            int location=sort(a,low,high);
            quicksort(a,low,location-1);
            quicksort(a,location+1,high);
        }
    }
    int main()
    {   
        int i,a[]={3,1,5,7,2,4,9,6,10,8};
        int len=sizeof(a)/sizeof(a[0]);
        quicksort(a,0,9);
        for(i=0;i<len;i++)
            printf("%d ",a[i]);
        printf("
    ");
        return 0;
    }
    [08:32:29] 
    
  • 相关阅读:
    web漏洞之SQL注入
    web漏洞之文件包含
    web漏洞之文件上传
    CVE-2020-1938 Apache-Tomcat-Ajp漏洞复现
    web漏洞之命令执行
    web漏洞之XXE
    web漏洞之CORS
    web漏洞之SSRF
    web漏洞之CSRF
    web漏洞之XSS
  • 原文地址:https://www.cnblogs.com/biaopei/p/7730643.html
Copyright © 2020-2023  润新知