c语言 数组选定界限分大小问题

已知一个采用顺序储存结构进行存储的线性表a,其中的元素都是互不相等的整数

设计一个算法,将线性表重新排列称为一个节点为界的两部分

前一部分元素都小于他,后一部分都大于他

/*
现在有一个数组
要求以第一个数为界限
把数组中大于该数的项放到右边
小于的放到左边 
*/ 
#include<stdio.h>
void partition(int a[],int n)
{
    int i=0,j=n-1;
    int key=a[0];
    while(i<j)
    {
        while(i<j&&a[j]>key)
            --j;
        if(i<j)
            a[i++]=a[j];
        while(i<j&&a[i]<key)
            ++i;
        if(i<j)
            a[j--]=a[i];
    }
    a[i]=key;
}
int main(){
    int arr[8]={4,5,1,6,8,2,3,7};
    int n=8;
    partition(arr,n);
    for(int i=0;i<n;i++)
        printf("%d	",arr[i]);
}
此方法后期可适用于快速排序,后面讲贴出快速排序的方法

结果为

 

原文地址:https://www.cnblogs.com/oldfish123/p/12892065.html