数据结构—快速排序模型

来源:互联网 发布:淘宝修改密码 编辑:程序博客网 时间:2024/05/18 20:07

题目:

有一个线性表L,假设元素类型ElemType为整型。设计一个程序,将所有小于等于它的元素移到该元素的前面,将所有大于它的元素移到该元素的后面。

/*思路一:用pivot存放基准即L->data[0],用i和j分别指向顺序表L的第一个元素(i=0)和最后一个元素(j=L->length-1),当i<j时循环:从右向左扫描,找一个关键字小于等于pivot的data[j],再从左向右扫描,找一个关键字大于pivot的记录data[i],将两者进行交换。当循环结束后将data[0]和data[j]交换。思路二:用i从左向右查找,j从右向左查找。以元素data[0]为基准(将其先放在pivot中)。当i不等于j时循环:从右向左扫描,找一个关键字小于等于pivot的data[j],找到后用data[j]覆盖data[i],再从左向右扫描,找一个关键字大于pivot的记录data[i],用data[i]覆盖data[j],最后让data[i]=pivot。*/#include <iostream>#include <malloc.h>#define MaxSize 100using namespace std;typedef int ElemType;typedef struct{    ElemType data[MaxSize];    int length;} SqList;void move1(SqList *&L){    int i=0,j=L->length-1;    ElemType pivot=L->data[0];   //以第一个元素为基准    ElemType tmp;    while(i<j)                 //从区间两端交替向中间扫描,直至i=j为止    {        while(i<j&&L->data[j]>pivot)  //找一个小于pivot的元素            j--;        while(i<j&&L->data[i]<=pivot) //找一个大于pivot的元素            i++;        if(i<j)                   //交换两值        {            tmp=L->data[i];            L->data[i]=L->data[j];            L->data[j]=tmp;        }    }    tmp=L->data[0];            //交换pivot和data[j]的值    L->data[0]=L->data[j];    L->data[j]=tmp;    cout<<"i="<<i<<endl;}void move2(SqList *&L){    int i=0,j=L->length-1;    ElemType pivot=L->data[0];   //以第一个元素为基准    while(i<j)                         {        while(i<j&&L->data[j]>pivot)//找一个小于pivot的元素            j--;        L->data[i]=L->data[j];     //找到这样的data[j]放入data[i]处        i++;        while(i<j&&L->data[i]<=pivot)  //找一个大于pivot的元素            i++;        L->data[j]=L->data[i];         //找到这样的data[i]放入data[j]处        j--;    }    L->data[i]=pivot;    cout<<"i="<<i<<endl;}int main(){    SqList *L1,*L2;    ElemType a[10]= {3,8,2,7,1,5,2,4,6,7};    L1=(SqList *)malloc(sizeof(SqList));    for(int i=0; i<10; i++)        L1->data[i]=a[i];    L1->length=10;    move1(L1);     for(int i=0; i<L1->length; i++)        cout<<L1->data[i]<<" ";    cout<<endl;    L2=(SqList *)malloc(sizeof(SqList));    for(int i=0; i<10; i++)        L2->data[i]=a[i];    L2->length=10;    move2(L2);     for(int i=0; i<L2->length; i++)        cout<<L2->data[i]<<" ";    cout<<endl;    return 0;}

运行结果:


0 0
原创粉丝点击