核心思想(以排序10万个手机号为例子):字符串
比较两个手机号码a,b的大小,若是在前面几位中a已经比b大了,那后面几位就不用看了。class
借助稳定排序算法的思想,能够先按照最后一位来排序手机号码,而后再按照倒数第二位来从新排序,以此类推,最后按照第一个位从新排序。遍历
通过11次排序后,手机号码就变为有序的了。数据
每次排序有序数据范围较小,可使用桶排序或计数排序来完成。
di
使用条件:
假设咱们如今须要对D,a,F,B,c,A,z这个字符串进行排序,要求将其中全部小写字母都排在大写字母的前面,但小写字母内部和大写字母内部不要求有 序。好比通过排序以后为a,c,z,D,F,B,A,这个如何来实现呢?若是字符串中存储的不只有大小写字母,还有数字。要将小写字母的放到前面,大写字母 放在最后,数字放在中间,不用排序算法,又该怎么解决呢?
解答: 用两个指针a,b:a指针从头开始日后遍历,遇到大写字母就停下,b从后往前遍历,遇到小写字母就停下,交换a,b指针对应的元素;重复如上过程,直到a.b指针相交。
对于小写字母放前面,数字放中间,大写字母放后面,能够先将数据分为小写字母和非小写字母两大类,进行如上交换后再在非小写字母区间内分为数字和大写字母作一样处理