链表的快速排序法

来源:互联网 发布:宏汇软件 编辑:程序博客网 时间:2024/06/14 17:55

如何根据链表的某一元素对整体进行快速排序?

数组的快速排序法

/*对数组中的元素按照从小到大的顺序快速排序*/void QuickSort(int * a,int left,int right){    //设置终结递归的条件    if(left>=right)        return ;    int l=left,r=right;    int value=left;    while(l<r)    {        while((a[r]<=value)&&(l<r))            r-;        if(l<r)        {            a[l]=a[r];            l++;        }        while((a[l]>=value)&&(l<r))            l++;        if(l<r)        {            a[r]=a[l];            r--;            }    }    a[l]=value;    //对两侧的数据分别进行递归排序    QuickSort(a,left,l-1);    QucikSort(a,r+1,right);}

链表的快速排序遇到的困难

  • 对链表而言,包含对个数据,因此要根据某一元素排序,交换其他所有元素
  • 由于链表只能依次进行查找,相对于数组排序不能用大于小于表示元素的关系。
  • 由于右边的元素要向前查找,因此最好使用双向链表进行分析。

链表的快速排序方法

/*left和right分别是双向链表开头和结尾的元素指针*/void RankList(Stu * left, Stu * right){//由于链表的局限性,不能比较大小,只能判断是否相等    if (left == right)        return;    Stu * l, *r;    l = left;    r = right;    //保存所有的元素(包括value本身)    int value = left->score;    do    {    while ((l != r) && (r->score <= value))        r = r->front;    if (l != r)    {        //进行赋值操作,同样是所有元素        l->score=r->score;        l = l->next;    }    while ((l != r) && (l->score >= value))        l = l->next;    if (l != r)    {        //进行赋值操作,同样是所有元素        r->score = l->score;        r = r->front;    }} while (l != r);//将所有之前保存的元素赋值l->score = value;//在递归之前判断是否继续进行递归if (l!=left)    RankList(left,l->front);if (r!=right)    RankList(r->next,right);}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 洛阳住房公积金查询 住房公积金卡 东莞住房公积金查询 南京住房公积金管理中心 成都住房公积金 广西住房公积金查询 广西区直住房公积金查询入口 哈尔滨住房公积金管理中心 武汉住房公积金查询个人账户 重庆市住房公积金管理中心 渭南住房公积金查询 咸阳市住房公积金管理中心 宁德住房公积金查询 苏州住房公积金管理中心 太原住房公积金 萍乡市住房公积金个人查询 深圳住房公积金查询余额 长春市住房公积金网 潍坊市住房公积金管理中心 阜阳市住房公积金查询 赣州住房公积金 太原住房公积金查询个人账户 郑州市住房公积金查询 杭州住房公积金管理中心 乐山市住房公积金管理中心 长春住房公积金查询 青海住房公积金查询网 住房公积金管理 宜春住房公积金查询 惠州市住房公积金管理中心 玉林住房公积金查询个人账户 枣庄住房公积金查询 六安住房公积金管理中心 厦门住房公积金查询 渭南市住房公积金个人查询 乐山住房公积金查询个人账户 深圳住房公积金电话多少 南宁住房公积金查询 住房公积金查询电话12329 济宁住房公积金管理中心 宁德市住房公积金查询窗口