设顺序表有10个元素,其元素类型为整型。设计一个算法,以第一个元素为分界线,将所有小于它的元素移到该元素的前面,将所有大于它的元素移到该元素的后面。
设计出的算法是:
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
} SqList;
void CreateList(SqList *&L, ElemType a[], int n)
{
int i;
L=(SqList *)malloc(sizeof(SqList));
for (i=0; i<n; i++)
L->data[i]=a[i];
L->length=n;
}
void DispList(SqList *L)
{
int i;
for (i=0; i<L->length; i++)
printf("%d ",L->data[i]);
printf("\n");
}
void move1(SqList *&L) //定义解决问题的算法
{
int i=0,j=L->length-1;
ElemType pivot=L->data[0];
ElemType tmp;
while (i<j)
{
while (i<j && L->data[j]>pivot)
j--;
while (i<j && L->data[i]<=pivot)
i++;
if (i<j)
{
tmp=L->data[i];
L->data[i]=L->data[j];
L->data[j]=tmp;
}
}
tmp=L->data[0];
L->data[0]=L->data[j];
L->data[j]=tmp;
}
int main() //在main函数中调用,保证程序能运行,解决问题
{
SqList *sq;
ElemType x[10]= {3, 8, 2, 7, 1, 5, 3, 4, 6, 0};
CreateList(sq, x, 10);
DispList(sq);
move1(sq);
DispList(sq);
return 0;
}