高级排序之分割法(以某数为基准分割)

示例为最后一个元素为分割的基准值,小于这个值的在左边,大于这个基准值的在右边

最后一个数是5,以5为判断基准! 

#include<stdio.h>
#define MAX 10000

int A[MAX],n;

int mypartition(int left,int right)
{
    int x,i,j,t;
    x=A[right];//最后一个元素作为分割的基准
    i=left-1;
    for(j=left; j<right; j++)
    {
        if(A[j]<x) //比基准值小的交换A[i]与A[j]
        {
            i++;
            t=A[i];
            A[i]=A[j];
            A[j]=t;
        }
    }
    t=A[i+1];
    A[i+1]=A[right];
    A[right]=t;//最后把基准值与A[i+1]交换即可
    return i+1;
}

int main()
{
    int i,q;
    printf("输入数组的长度:");
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        scanf("%d",&A[i]);
    }
    q=mypartition(0,n-1);

    for(i=0; i<n; i++)
    {
        if(i)
            printf(" ");
        if(i==q)
            printf("[");
        printf("%d",A[i]);
        if(i==q)
            printf("]");
    }
    printf("\n");
    return 0;
}

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页