常见算法笔试题的研究1(自定义排序规则的整数排序)

题目

给定字符串内有很多正整数,要求对这些正整数进行排序,然后返回排序后指定位置的正整数

排序要求:按照每个正整数的后三位数字组成的整数进行从小到大排序
1)如果不足三位,则按照实际位数组成的整数进行比较
2)如果相等,则按照输入字符串中的原始顺序排序

说明(以下内容考生无须检查,调用者保证):
1) 字符串以’\0’结尾,仅包含数字、空格
2) 字符串内正整数之间以单个空格分隔,字符串首尾没有空格
3) 正整数格式为十进制,大小:1~1000000,正整数的数字非零开始

示例:
如字符串内容
1223 22 3232 2016

按照规定排序后
2016 22 1223 3232

题目分析
该题是一个整数的排序题目,但是有两点需要注意:
第一、根据给定的大小条件进行排序,不再是单单谁的数值的数值大小的问题,相当于两个数值之间的大小是一种新的概念,所以我们需要写一个函数进行判断两数之间的大小关系。
第二、对排序稳定性的考察,本题排序个数一般不会太多,所以我们就会想到选择排序和冒泡排序,但是注意这句话“如果相等,则按照输入字符串中的原始顺序排序”,意思是必须是稳定的排序,所以选择
排序就不能用了,我这里就使用的冒泡排序(代码简单,但是对数据多时效率低)。

首先,完成数值大小比较的函数

/**
     * 自定义比较两个数的大小
     * 判断前一个数是否比后一个数大,如果大于返回true,否则为false
     */
    private static boolean bigger(int num1,
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值