顺序表的划分问题

1.以顺序表第一个元素为枢轴划分,左边的都小于枢轴,右边的都大于等于枢轴

void partition(int a[],int n){
    int temp=a[0];
    int i=0;
    int j=n-1;
    while(i<j){
        while(i<j && a[j]>temp){
            j--;
        }
        if(i<j){
            a[i]=a[j];
            i++;
        }
        while(i<j &&a[i]<=temp){
            i++;
        }
        if(i<j){
            a[j]=a[i];
            j--;
        }
    }
    a[i]=temp;
}

2.以任意数值为枢轴

void partition(int a[],int n,int com){
    int temp=a[0];
    int i=0;
    int j=n-1;
    while(i<j){
        while(i<j && a[j]>com){
            j--;
        }
        if(i<j){
            a[i]=a[j];
            i++;
        }
        while(i<j &&a[i]<=com){
            i++;
        }
        if(i<j){
            a[j]=a[i];
            j--;
        }
    }
    a[i]=temp;
}

3.以顺序表中任意值为枢轴

 

void partition(int a[],int n,int k){
    int temp=a[0];
    a[0]=a[k];
    a[k]=temp;
    int i=0;
    int j=n-1;
    temp=a[i];
    while(i<j){
        while(i<j && a[j]>temp){
            j--;
        }
        if(i<j){
            a[i]=a[j];
            i++;
        }
        while(i<j &&a[i]<=temp){
            i++;
        }
        if(i<j){
            a[j]=a[i];
            j--;
        }
    }
    a[i]=temp;
}

 

 

 

 

posted on 2020-06-22 09:10  二进制dd  阅读(260)  评论(0编辑  收藏  举报

导航