插入数字排序问题

1:要求在一组数中,插入一个新数,并维护原来的排序方式不变

我的代码如下:

 

 
 
  1. <?php  
  2. /*  
  3. *1:要求在一组数中,插入一个新数,并维护原来的排序方式不变  
  4. *系统环境:windows/linux  
  5. *编译环境:php4/php5  
  6. *输入参数:存放在in.txt,多个参数时空格分隔  
  7.                     参数1是一组数字,中间用逗号分割,按照数字升序或者降序排列  
  8.                     参数2是一个数字  
  9.                     例如格式:1,3,4,7,8 5  
  10.     输出:out.txt  
  11. */ 
  12.  
  13. $params=getParams(2);  
  14. //排序默认为升序,-1表示未知,true表示升序,false 表降序  
  15. $isOrderAsc=-1;  
  16. $argv0=trim(trim($params[0]),",");  
  17. $argv1=trim($params[1]);  
  18. //检查参数1  
  19. if(!preg_match_all("/^((\d+),?)+$/i"$argv0,$matches))  
  20. {  
  21.     error_msg("params 1 must is group of numbers,break with ;");  
  22. }  
  23. //检查参数2  
  24. if(!is_numeric($argv1))  
  25. {  
  26.     error_msg("params 2 must be a numbers");  
  27. }  
  28. //把参数1转为数组  
  29. $numbers=split(",",trim($argv0","));  
  30. $tmp_numbers=$numbers;  
  31. //判断是不是升序  
  32. if(sort($tmp_numbers,SORT_NUMERIC) && $tmp_numbers===$numbers)  
  33. {  
  34.     $isOrderAsc=true;  
  35. }else if(rsort($tmp_numbers,SORT_NUMERIC) && $tmp_numbers===$numbers)  
  36. {  
  37.     //判断是不是降序  
  38.     $isOrderAsc=false;  
  39. }  
  40. if($isOrderAsc===-1)  
  41. {  
  42.     error_msg("params 1 must order by asc or desc");  
  43. }  
  44. array_push($numbers,$argv1);  
  45. if($isOrderAsc)  
  46. {  
  47.     sort($numbers,SORT_NUMERIC);  
  48. }else{  
  49.     rsort($numbers,SORT_NUMERIC);  
  50. }  
  51. //输出结果  
  52. output(join(",",$numbers),true);  
  53. error_msg("execute success");  
  54. /*  
  55.     从in.txt里读取参数  
  56. */ 
  57. function getParams($paramNum)  
  58. {  
  59.     $in=file_get_contents("in.txt");  
  60.     if($in===FALSE){  
  61.         error_msg("cannot read in.txt,please check in.txt exists\n");     
  62.     }  
  63.     $in=preg_replace("/(\s+)/i"" "$in);  
  64.     //多个参数时,按照空格分隔  
  65.     $parms=split(" ",trim($in));  
  66.     if($parms===FALSE)  
  67.     {  
  68.         error_msg("cannot get param from in.txt\n");  
  69.     }  
  70.     if(count($parms) < $paramNum)  
  71.     {  
  72.         error_msg("it needs $paramNum params\n");  
  73.     }  
  74.     return $parms;  
  75. }  
  76.  
  77. /*  
  78.     把结果输出到输出文件里  
  79.     当isClean=true时清空out.txt  
  80. */ 
  81. function output($msg,$isClean=false)  
  82. {  
  83.     if($isClean)  
  84.     {  
  85.     $handle = fopen('out.txt''w');  
  86.     fclose($handle);      
  87.     }  
  88.     error_log($msg."\n", 3, "out.txt");  
  89. }  
  90.  
  91. function error_msg($msg,$is_Exit=true)  
  92. {  
  93.     if($is_Exit)  
  94.         exit($msg."\n");  
  95.     else 
  96.         echo $msg."\n";  
  97. }  
  98. ?> 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里是使用插入排序算法来将十个数字从小到大排序的过程: 1. 我们先定义一个包含十个数字的数组,如下所示: ``` int arr[] = { 5, 9, 3, 6, 2, 8, 1, 7, 4, 10 }; ``` 2. 接下来开始插入排序的过程。我们从第二个数字开始,也就是数字 9,将其插入到已排序好的子数组中。此时,已排序好的子数组只有一个数字 5。 3. 我们比较要插入数字 9 和已排序好的子数组中的数字 5。由于 9 大于 5,因此将数字 9 插入数字 5 的后面,得到已排序好的子数组 { 5, 9 }。 4. 下一个数字是 3,将其插入排序好的子数组 { 5, 9 } 中。我们先比较 3 和 9,发现 3 小于 9,因此 3 应该插入数字 9 的前面。此时,已排序好的子数组变为 { 5, 3, 9 }。 5. 接下来是数字 6,将其插入排序好的子数组 { 5, 3, 9 } 中。我们先比较 6 和 9,发现 6 小于 9,因此 6 应该插入数字 9 的前面。接着比较 6 和 3,发现 6 大于 3,因此将数字 6 插入数字 3 的后面,得到已排序好的子数组 { 5, 3, 6, 9 }。 6. 下一个数字是 2,将其插入排序好的子数组 { 5, 3, 6, 9 } 中。我们先比较 2 和 9,发现 2 小于 9,因此 2 应该插入数字 9 的前面。接着比较 2 和 6,发现 2 小于 6,因此 2 应该插入数字 6 的前面。再比较 2 和 3,发现 2 小于 3,因此 2 应该插入数字 3 的前面。最终得到已排序好的子数组 { 2, 5, 3, 6, 9 }。 7. 接下来是数字 8,将其插入排序好的子数组 { 2, 5, 3, 6, 9 } 中。我们先比较 8 和 9,发现 8 小于 9,因此 8 应该插入数字 9 的前面。接着比较 8 和 6,发现 8 大于 6,因此将数字 8 插入数字 6 的后面,得到已排序好的子数组 { 2, 5, 3, 6, 8, 9 }。 8. 下一个数字是 1,将其插入排序好的子数组 { 2, 5, 3, 6, 8, 9 } 中。我们先比较 1 和 9,发现 1 小于 9,因此 1 应该插入数字 9 的前面。接着比较 1 和 8,发现 1 小于 8,因此 1 应该插入数字 8 的前面。再比较 1 和 6,发现 1 小于 6,因此 1 应该插入数字 6 的前面。再比较 1 和 3,发现 1 小于 3,因此 1 应该插入数字 3 的前面。最终得到已排序好的子数组 { 1, 2, 5, 3, 6, 8, 9 }。 9. 最后一个数字是 4,将其插入排序好的子数组 { 1, 2, 5, 3, 6, 8, 9 } 中。我们先比较 4 和 9,发现 4 小于 9,因此 4 应该插入数字 9 的前面。接着比较 4 和 8,发现 4 小于 8,因此 4 应该插入数字 8 的前面。再比较 4 和 6,发现 4 大于 3,因此将数字 4 插入数字 6 的后面,得到已排序好的子数组 { 1, 2, 5, 3, 4, 6, 8, 9 }。 10. 至此,我们已经将所有的数字按照从小到大的顺序排好了。最终的排序结果为 { 1, 2, 3, 4, 5, 6, 8, 9, 10 }。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值