美文网首页
快速排序 - C语言

快速排序 - C语言

作者: 元气满满321 | 来源:发表于2017-04-13 21:03 被阅读1025次

    啥是快排

    快排就是选定一个基准元素pirot,经过一趟排序后,使得pirot前面的元素都比它小,pirot后面的元素都比它大,之后以pirot为界,分为两部分数据,按刚才的方法对这两部分数据分别快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    一趟快排

    假定对有N个元素的数组 arr 进行快排
    1)设置两个变量i、j,排序开始的时候i:=1,j:=N;

    2)以第一个数组元素arr[0]作为基准元素,赋值给pirot,即pirot:=arr[0];

    3)从j开始向前搜索,即由后开始向前搜索,只要j大于pirot, j:=j-1,一旦找到第一个小于pirot的值,两者交换,然后把主动权交给i,让i跑;

    4)从i开始向后搜索,即由前开始向后搜索,只要i小于pirot, i:=i-1,一旦找到第一个大于pirot的值,两者交换,然后把主动权交给j,让j跑;

    5)重复第3、4步,直到 i=j ;
    例如,对32 12 7 78 23 45进行第一趟排序

    第一趟排序

    代码如下

    #include<stdio.h> 
    
    int  arr[6] = {32 ,12 ,7 ,78, 23, 45};
    void quiksort(int a[],int low,int high)
    {
        int i = low;
        int j = high;  
        int temp = a[i]; 
      
        if( low > high)
        {          
           return ;
        }
        while(i < j) 
            {
                while((a[j] >= temp) && (i < j))
                { 
                    j--; 
                }
                a[i] = a[j];
                while((a[i] <= temp) && (i < j))
                {
                    i++; 
                }  
                a[j]= a[i];
            }
         a[i] = temp;
         quiksort(a,low,i-1);
         quiksort(a,j+1,high);
    }
     
    void main()
    {
        int i;
        quiksort(arr,0,5);
        for(i=0;i<6;i++)
        {
            printf("%d ",arr[i]);
        }
        printf("\n");
    }
    

    要注意递归的出口是low==high,所以当
    ` ``
    if(low>high){
    return;
    }

    每天都努力一点点
    谢谢你看完
    ***

    相关文章

      网友评论

          本文标题:快速排序 - C语言

          本文链接:https://www.haomeiwen.com/subject/myfvattx.html