前天跟师兄出去吃宵夜的时候, 师兄提了一下他面试的时候面试官出的一道算法题, 听了以后挺感兴趣的, 想了一个解决方法, 在这里做下记录.
题目要求: 给一个数组, 要求用它组成一个最大的数, 如用 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 }