0
点赞
收藏
分享

微信扫一扫

C/C++快速排序算法

NicoalsNC 2022-02-07 阅读 63
#include <stdlib.h>
#include <stdio.h>

void quicksort(int *arr,unsigned int len)
{
    if(len < 2)  return;//如果子序列小于两个元素则不用排序

    int l = 0;//左下标
    int r = len-1;//右下标
    int tmp = arr[0];//选取最左边数为中心轴
    int flag = 2;//标志位   设置默认从右边开始

    while(l<r)
    {
        if(flag == 2)//右区间
        {
            if(arr[r] >= tmp )
            {
                r--;
                continue;
            }

            arr[l] = arr[r];
            l++;
            flag = 1 ;
            continue;
        }

        if(flag == 1)//左区间
        {
            if(arr[l] <= tmp)
            {
                l++;
                continue;
            }

            arr[r] = arr[l];
            r--;
            flag = 2;
            continue;
        }

    }

    arr[l] = tmp;
    //arr[r] = tmp;  也可以

    quicksort(arr,l);//左区间排序
    quicksort(arr+l+1,len-l-1);//右区间排序
}



int main(int argc,char *argv[])
{
    int arr[]={44,3,38,5,47,15,36,26,27,2,46,4,19,50,48};
    int len=sizeof(arr)/sizeof(int);

    quicksort(arr,len);   // 调用插入排序函数对数组排序。

    // 显示排序结果。
    int yy; 
    for (yy=0;yy<len;yy++) 
        printf("%2d ",arr[yy]); 

    printf("\n");

    return 0;
}
举报

相关推荐

0 条评论