TC官方合作论坛

 找回密码
 立即注册
查看: 572|回复: 2

[学习心得] [TC7.0|8.0] TC数组的快速排序算法

[复制链接]
发表于 2024-5-14 22:53:49 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 yuzhiboqianyuan 于 2024-9-4 18:29 编辑

问了下GPT关于数组快排算法的伪代码,然后翻译成TC的代码。
没啥技术含量,仅供娱乐。


  1. 功能 按钮_点击()
  2.         //这里添加你要执行的代码
  3.        //开始验证
  4.         var tempArr = array(10, 7, 8, 9, 1, 5)  
  5.         traceprint(tempArr)
  6.         quickSort(tempArr, 0, arraysize(tempArr)-1)
  7.         traceprint(tempArr)
  8. 结束
复制代码
  1. //数组快排算法
  2. function quickSort(&arr, low, high)//对arr数组进行基于value的快速排序,外部调用时,low为0,high为数组大小-1
  3.     var pi
  4.     if(low < high)
  5.         //pi 是分区索引,array[pi]已经在最终位置
  6.         pi = partition(arr, low, high)
  7.         //分别对基准值作为两边的子数组进行递归排序
  8.         quickSort(arr, low, pi - 1)
  9.         quickSort(arr, pi + 1, high)
  10.     end
  11. end
  12. function partition(&arr, low, high)
  13.     //选择最右侧的元素作为基准值
  14.     var pivotVaule, pivotKey
  15.     arraygetat(arr, high, pivotVaule, pivotKey)
  16.     //i是小于基准值的元素的位置索引
  17.     var  i = low - 1
  18.     for(var j = low; j <= high - 1; j++)
  19.         var value, key
  20.         arraygetat(arr, j, value, key)
  21.         if(value <= pivotVaule)
  22.             //增加i
  23.             i++
  24.             //交换array和array[j]
  25.             ArrSwapEle(arr, i, j)
  26.         end
  27.     end
  28.     ArrSwapEle(arr, i + 1, high)
  29.     return i + 1
  30. end
  31. //数组元素交换
  32. function ArrSwapEle(&arr, firstPos, secondPos)//pos为数组索引,从0开始,直接操作原数组,将两个位置的索引元素进行交换
  33.     //将firstPos和secondPos两个位置的元素进行交换  
  34.     if(arraysize(arr) < 2)
  35.         //数组元素数量不足,无法交换
  36.         return
  37.     elseif(firstPos == secondPos)
  38.         //如果两个位置相等的话,直接返回
  39.         return
  40.     elseif(firstPos < 0)
  41.         //位置非法,直接返回
  42.         return
  43.     elseif(secondPos < 0)
  44.         //位置非法,直接返回
  45.         return
  46.     elseif(firstPos > arraysize(arr))
  47.         //位置非法,直接返回
  48.         return
  49.     elseif(secondPos > arraysize(arr))
  50.         //位置非法,直接返回
  51.         return
  52.     elseif(firstPos > secondPos)
  53.         //交换firstPos和secondPos的值
  54.         var tempPos = firstPos
  55.         firstPos = secondPos
  56.         secondPos = tempPos
  57.     end
  58.     var firstPosValue, firstPosKey, secondPosValue, secondPosKey
  59.     arraygetat(arr, firstPos, firstPosValue, firstPosKey)
  60.     arraygetat(arr, secondPos, secondPosValue, secondPosKey)
  61.     arraydeletepos(arr, firstPos)
  62.     arraydeletepos(arr, secondPos - 1)
  63.     arrayadd(arr, secondPosValue, secondPosKey, firstPos)
  64.     arrayadd(arr, firstPosValue, firstPosKey, secondPos)
  65. end
复制代码








20240904更新,1、才发现之前提交的代码没有复制全,现在给补上了。2、快速将 D:\Program Files\Todesk\ToDesk.exe  这种全路径后面的文件名替换成 config.ini,两种方式任君选择。
  1.         变量 窗口程序全路径 = 窗口获取路径(窗口句柄)  
  2.         traceprint(窗口程序全路径)

  3.         //替换文件名方式1
  4.         var 配置文件全路径 = 正则表达式替换(窗口程序全路径, "(?<=\\\\)[^\\\\]*\\.?[^\\\\]*[        DISCUZ_CODE_1        ]quot;, "config.ini")      //把后面的文件名用正则匹配替换成配置文件名称
  5.         traceprint(配置文件全路径)

  6.         //替换文件名方式2
  7.         var 配置文件全路径2 = 字符串截取左侧(窗口程序全路径, 字符串长度(窗口程序全路径) - 字符串查找(字符串倒序(窗口程序全路径), "\"))   &"config.ini"
  8.         traceprint(配置文件全路径2)

  9.         var 配置文件内容 = 文件读配置("ConfigInfo", "Resolution", 配置文件全路径)
  10.         traceprint("配置文件内容: " & 配置文件内容)
复制代码


输出>>"D:\Program Files\Todesk\ToDesk.exe"

输出>>"D:\Program Files\Todesk\config.ini"   

输出>>"D:\Program Files\Todesk\config.ini"   

输出>>"配置文件内容: 1920x1080"   








回复

使用道具 举报

发表于 2024-5-18 19:06:52 | 显示全部楼层
TC还有用户 哈哈
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-19 07:44:15 | 显示全部楼层
CNXXP 发表于 2024-5-18 19:06
TC还有用户 哈哈

哈哈哈,只是个会搬运的新手
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-9-26 21:10 , Processed in 0.035428 second(s), 23 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表