已知一个采用顺序储存结构进行存储的线性表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]); }
此方法后期可适用于快速排序,后面讲贴出快速排序的方法
结果为