[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 19# happy886rr


    ? 贴了一个别人的,好像是快速排序

TOP

回复 11# 523066680
是否可以用快速排序

TOP

本帖最后由 523066680 于 2016-8-24 18:43 编辑

回复 17# GNU


      他们当然知道如何获取更详细的时间单位,说的是那个网站的在线测试的时间单位精度有限。
再说线下比较还可以增加测试次数和列表数据量。所以不同的结论需要结合前后文(Context)。

TOP

回复 16# CrLf


PowerShell的 Measure-Command 可以获取到 Ticks
1 Ticks = 100 纳秒 = 1/10000 毫秒
1

评分人数

    • CrLf: 感谢分享技术 + 1

TOP

好像还可以继续优化,可惜没有微秒和纳秒,比较不出来

TOP

回复 13# xxpinqz


    说实话,不是很喜欢谍影重重5这种全程高能的肌肉片

TOP

转一个别人的代码

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdint.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <stdio.h>
  6. int Comparer(char * strLeft, char * strRight)
  7. {
  8. char * cmpLeft = strLeft;
  9. char * cmpRight = strRight;
  10. for (;; ++cmpLeft, ++cmpRight)
  11. {
  12. char chLeft = *cmpLeft;
  13. char chRight = *cmpRight;
  14. if (!chLeft && !chRight)
  15. return 0;
  16. if (!chLeft)
  17. {
  18. cmpLeft = strRight;
  19. chLeft = *cmpLeft;
  20. }
  21. if (!chRight)
  22. {
  23. cmpRight = strLeft;
  24. chRight = *cmpRight;
  25. }
  26. if (chLeft == chRight)
  27. continue;
  28. else
  29. return chLeft > chRight;
  30. }
  31. return 0;
  32. }
  33. void QS_Swap(char ** left, char ** right)
  34. {
  35. char * tmp = *left;
  36. *left = *right;
  37. *right = tmp;
  38. }
  39. int QS_Partition(char ** arr, int lo, int hi)
  40. {
  41. char * pivot = arr[hi];
  42. int i = lo;
  43. for (int j = lo; j < hi; ++j)
  44. {
  45. if (Comparer(arr[j], pivot))
  46. {
  47. QS_Swap(&arr[i], &arr[j]);
  48. ++i;
  49. }
  50. }
  51. QS_Swap(&arr[i], &arr[hi]);
  52. return i;
  53. }
  54. void QS_Sort(char ** arr, int lo, int hi)
  55. {
  56. if (lo < hi)
  57. {
  58. int p = QS_Partition(arr, lo, hi);
  59. QS_Sort(arr, lo, p - 1);
  60. QS_Sort(arr, p + 1, hi);
  61. }
  62. }
  63. void QSort(char ** arr, int len)
  64. {
  65. QS_Sort(arr, 0, len - 1);
  66. }
  67. char * largestNumber(int * nums, int numsSize)
  68. {
  69. char * strBuf = (char*)malloc(numsSize * 16);
  70. char ** strNums = (char**)malloc(sizeof(char*) * numsSize);
  71. int szTotalLen = 0;
  72. for (int i = 0; i < numsSize; ++i)
  73. {
  74. //char * strItem = _itoa(pNums[i], strBuf, 10);
  75. sprintf(strBuf, "%d", nums[i]);
  76. char * strItem = strBuf;
  77. int slen = strlen(strItem);
  78. szTotalLen += slen;
  79. strBuf += slen + 1;
  80. strNums[i] = strItem;
  81. }
  82. QSort(strNums, numsSize);
  83. strBuf = (char*)malloc(szTotalLen + 1);
  84. char * strRes = strBuf;
  85. for (int i = 0; i < numsSize; ++i)
  86. {
  87. char * strItem = strNums[i];
  88. strcpy(strBuf, strItem);
  89. strBuf += strlen(strItem);
  90. }
  91. while (*strRes == '0' && *(strRes + 1))
  92. ++strRes;
  93. return strRes;
  94. }
  95. int main()
  96. {
  97. int nums[] = { 0, 0, 1 };
  98. char *s = largestNumber(nums, sizeof(nums) / sizeof(nums[0]));
  99. printf("%s", s);
  100. return 0;
  101. }
复制代码

TOP

回复 8# CrLf

听说谍影系列不适合看3d版。。。晃不
没影院放2d的。
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 9# 523066680

嗯,不截取就好,我干嘛去截取。谢谢!
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

大家都习惯花括号不换行吗……

TOP

JavaScript 124ms:
  1. var largestNumber = function(nums) {
  2.     var arr = [];
  3.     [].forEach.call(arguments,function(a){a.map?[].push.apply(arr,a):arr.push(a)})
  4. return arr
  5.     .sort(function(a,b){
  6.     return ''+b+a > ''+a+b ? 1 : -1
  7.     })
  8.     .join('').replace(/^0+(.)/,'$1')
  9. }
复制代码
C语言 0ms:
  1. char* largestNumber(int* nums, int numsSize) {
  2. struct struct_num{
  3. int digit;
  4. int number;
  5. };
  6. struct struct_num *group[10][100], *pg, *pg2;
  7. int group_count[10]={0,0,0,0,0,0,0,0,0,0};
  8. int i,j,k;
  9. int number,index,digit;
  10. char output[10000]="0";
  11. char *p=output;
  12. const char itoa_map[11]="0123456789";
  13. for(i=numsSize;i--;){
  14. number = nums[i];
  15. for(digit=10;number>=digit;digit*=10){}
  16. index = number/(digit/10);
  17. pg=(struct struct_num *)malloc(sizeof(struct struct_num));
  18. group[index][group_count[index]++]=pg;
  19. (pg)->number = number;
  20. (pg)->digit = digit;
  21. }
  22. for(i=10;i--;){
  23. for(j=group_count[i];j-->0;){
  24. pg = group[i][j];
  25. for(k=j;k-->0;){
  26. pg2 = group[i][k];
  27. if(
  28. ((long long) pg->number * pg2->digit+pg2->number)< ((long long) pg2->number * pg->digit + pg->number)
  29. ){
  30. * (long long*) pg ^= * (long long*) pg2;
  31. * (long long*) pg2 ^= * (long long*) pg;
  32. * (long long*) pg ^= * (long long*) pg2;
  33. }
  34. }
  35. }
  36. for(j=group_count[i];j--;){
  37. pg = group[i][j];
  38. number = pg->number;
  39. digit = pg->digit / 10;
  40. while(digit >= 1){
  41. *p++ = itoa_map[number / digit % 10];
  42. digit /= 10;
  43. }
  44. free(pg);
  45. }
  46. }
  47. if(output[0]=='0')return "0";
  48. *p='\0';
  49. return output;
  50. }
复制代码
2

评分人数

TOP

本帖最后由 523066680 于 2016-8-24 08:42 编辑

回复 7# xxpinqz


    当输入数字是 830 8308 时,显示结果为:8308

TOP

回复 2# 523066680


    看完夜场谍影重重,回家撸了C语言
221 / 221 test cases passed.
Status: Accepted
Runtime: 0 ms

还不下跪
1

评分人数

TOP

本帖最后由 xxpinqz 于 2016-8-24 12:57 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set "s=89 89891 830 8308 8300 89899 9 999999999999999999999 9999999999999999999999999999"
  3. for %%a in (%s%) do (
  4.     set "a=%%a%%a%%a%%a%%a%%a%%a%%a%%a!random!"
  5.     set #!a!=%%a
  6. )
  7. (for /f "tokens=2 delims==" %%a in ('set # ^|sort /r') do set/p.=%%a)<nul
  8. pause
复制代码
变量a受最长的数值影响。。。。。。
1

评分人数

    • happy886rr: 几乎批处理不可能的,一个sort就完事了技术 + 1
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

本帖最后由 pcl_test 于 2016-8-23 20:56 编辑
  1. #*&cls&gawk -f "%~f0"&pause&exit
  2. BEGIN{
  3.     str="3,30,34,5,9"
  4.     split(str,a,",");
  5.     if(length(a)==1){
  6.         print a[1];
  7.     }else{
  8.         if(str~/^[0,]*$/){
  9.             print 0;
  10.         }else{
  11.             for(i=1;i<=length(a);i++){
  12.                 if(a[i]~/^0+[1-9][0-9]*$/){
  13.                     sub(/^0+/,"",a[i]);
  14.                 }else{
  15.                     if(a[i]~/^0+$/)sub(/0+/,"0",a[i]);
  16.                 }
  17.                 t=a[i];
  18.                 j=i-1;
  19.                 while(j>=1&&(!comp(a[j],t))){
  20.                     a[j+1]=a[j];
  21.                     j--;
  22.                 }
  23.                 a[j+1]=t;
  24.             }
  25.             for(i=1;i<=length(a);i++)s=s""a[i];
  26.             print s;
  27.         }
  28.     }
  29. }
  30. function comp(a,b){return (a""b)*1>(b""a)*1?1:0;}
复制代码
1

评分人数

TOP

返回列表