码迷,mamicode.com
首页 > 其他好文 > 详细

2.1.3 Sorting a Three-Valued Sequence

时间:2015-06-02 10:52:33      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:

七个字:从后往前先换大

就是从后往前扫,1的时候 从最大的可能中先替换3,然后替换2。

这个规律就是观察出的,比较好理解。

因为“从后往前先换大”的时候,把最大的放在的最后,这样可能就节省了下次的排序。

具体代码如下:

  1. /*
  2. ID: awsd1231
  3. PROG: sort3
  4. LANG: C++
  5. */
  6. #include<iostream>
  7. #include<cstdio>
  8. #include<algorithm>
  9. using namespace std;
  10. int n, a[1010];
  11. int main () {
  12. freopen("sort3.in", "r", stdin);
  13. freopen("sort3.out", "w", stdout);
  14. scanf("%d", &n);
  15. int c1(0);
  16. for (int i = 0; i != n; ++i) {
  17. scanf("%d", &a[i]);
  18. if(a[i] == 1) ++c1;
  19. }
  20. int cnt(0);
  21. for (int m = 1; m != 3; ++m) {
  22. for (int i = n - 1; i != -1; --i) {
  23. bool c3 = false;
  24. if (a[i] == m) {
  25. int t = i;
  26. if (m == 1) t = c1;
  27. for (int j = 0; j != t; ++j) {
  28. if (a[j] == 3) {
  29. int t = a[i];
  30. a[i] = a[j];
  31. a[j] = t;
  32. ++cnt;
  33. c3 = true;
  34. break;
  35. }
  36. }
  37. if (!c3 && m != 2) {
  38. for (int j = 0; j != i; ++j) {
  39. if (a[j] == 2) {
  40. int t = a[i];
  41. a[i] = a[j];
  42. a[j] = t;
  43. ++cnt;
  44. break;
  45. }
  46. }
  47. }
  48. }
  49. }
  50. }
  51. cout << cnt << endl;
  52. return 0;
  53. }





2.1.3 Sorting a Three-Valued Sequence

标签:

原文地址:http://www.cnblogs.com/liangyongrui/p/4545475.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!