[编程珠玑]可变长位字符串的排序问题

这个问题是在编程珠玑的11章习题5.

我看了该题的答案,按照答案实现的程序硬是跑不出来,我给的测试位字符串数组为:

    bitchars test[7];

    test[0].len =2;

    test[0].chars ="01";

    test[1].len =5;

    test[1].chars ="11010";

    test[2].len =1;

    test[2].chars ="1";

    test[3].len =7;

    test[3].chars ="0101011";

    test[4].len =4;

    test[4].chars ="0111";

    test[5].len =1;

    test[5].chars ="0";

    test[6].len =4;

    test[6].chars ="0101";

随后,自己分析了一下,改了改,可以了~~哈哈

贴代码:

/*

 void quickSortA1(bitchars array[], int l, int u, int sublen);

 快速排序应用,对可变长的位字符串数组[l,u)进行排序

 */

void quickSortA1(bitchars array[],int l, int u,int sublen)

{

   if (l >= u) {

       return;

    }

    //将长度小于等于sublen的字符串移至数组左边

   for (int i = l; i < u; i++) {

        if (array[i].len <= sublen) {

           swap(&array[i],&array[l]);

            l++;

        }

    }

   int m = l;

   if (l >= u) {

       return;

    }

    //将第sublen位为0的字符串移至长度为sublen字串的后面,为下一次循环左准备

   for (int i = l; i < u; i++) {

        if (array[i].chars[sublen] =='0') {

           swap(&array[i],&array[m]);

            m++;

        }

    }

    //注意,l是变化的。经过两个循环能保证起始位置至l处的已排好序,所以只需对l以后的数组排序

   quickSortA1(array, l, u, sublen+1);

}

另,函数调用时使用从sublen=0,即可


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值