TC官方合作论坛

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

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

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

马上加入TC

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

x
本帖最后由 yuzhiboqianyuan 于 2024-6-1 18:41 编辑

问了下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. 结束




  9. function quickSort(&arr, low, high)
  10.         var pi
  11.         if(low < high)
  12.                 //pi 是分区索引,array[pi]已经在最终位置
  13.                 pi = partition(arr, low, high)
  14.                 //分别对基准值作为两边的子数组进行递归排序
  15.                 quickSort(arr, low, pi - 1)
  16.                 quickSort(arr, pi + 1, high)
  17.         end
  18. end


  19. function partition(&arr, low, high)
  20.         //选择最右侧的元素作为基准值
  21.         var pivotVaule, pivotKey
  22.         arraygetat(arr, high, pivotVaule, pivotKey)

  23.         //i是小于基准值的元素的位置索引
  24.         var  i = low - 1

  25.         for(var j = low; j <= high - 1; j++)
  26.                 var value, key
  27.                 arraygetat(arr, j, value, key)
  28.                 if(value <= pivotVaule)
  29.                         //增加i
  30.                         i++
  31.                         //交换array和array[j]
  32.                         ArrSwapEle(arr, i, j)
  33.                 end
  34.         end
  35.         ArrSwapEle(arr, i + 1, high)
  36.         return i + 1
  37. end


  38. function ArrSwapEle(&arr, firstPos, secondPos)//pos为数组索引,从0开始,直接操作原数组,将两个位置的索引元素进行交换
  39.         //将firstPos和secondPos两个位置的元素进行交换  
  40.         if(arraysize(arr) < 2)
  41.                 //数组元素数量不足,无法交换
  42.                 return
  43.         elseif(firstPos == secondPos)
  44.                 //如果两个位置相等的话,直接返回
  45.                 return
  46.         elseif(firstPos < 0)
  47.                 //位置非法,直接返回
  48.                 return
  49.         elseif(secondPos < 0)
  50.                 //位置非法,直接返回
  51.                 return
  52.         elseif(firstPos > arraysize(arr))
  53.                 //位置非法,直接返回
  54.                 return
  55.         elseif(secondPos > arraysize(arr))
  56.                 //位置非法,直接返回
  57.                 return
复制代码


回复

使用道具 举报

发表于 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-6-16 11:08 , Processed in 0.039662 second(s), 22 queries .

Powered by 海安简单软件服务部

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

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