面试题---“多维排序”

       前天跟师兄出去吃宵夜的时候, 师兄提了一下他面试的时候面试官出的一道算法题, 听了以后挺感兴趣的, 想了一个解决方法, 在这里做下记录.

 

       题目要求: 给一个数组, 要求用它组成一个最大的数, 如用 5 , 7, 8, 12, 9 就可以组成 987512 ;

 

       思路:     排序 –> 比较 –> 交换 –> 输出      

 

       代码:

 1 /// <summary>
2 /// 排序方法
3 /// </summary>
4 /// <param name="arr"></param>
5 public void Sort(int[] arr)
6 {
7 bool change = true;
8
9 for (int i = 0; i < arr.Length && change; i++)
10 {
11 change = false;
12
13 for (int j = arr.Length - 1; j > i; j--)
14 {
15 if (Compare(arr[j], arr[j - 1]))
16 {
17 change = true;
18 int a = arr[j];
19 arr[j] = arr[j - 1];
20 arr[j - 1] = a;
21 }
22 }
23 }
24 }
25
26 /// <summary>
27 /// 比较方法
28 /// </summary>
29 /// <param name="l"></param>
30 /// <param name="r"></param>
31 /// <returns></returns>
32 public bool Compare(int l, int r)
33 {
34 string strl = l.ToString();
35 string strr = r.ToString();
36 if (l == r)
37 {
38 return false;
39 }
40 else
41 {
42 for (int i = 0; i < strl.Length && i < strr.Length; i++)
43 {
44 if (strl[i] > strr[i])
45 {
46 return true;
47 }
48 else if (strl[i] < strr[i])
49 {
50 return false;
51 }
52 }
53
54 return (strl.Length > strr.Length);
55 }
56 }
 

转载于:https://www.cnblogs.com/mend/archive/2011/09/28/2193816.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值