TA的每日心情 | 郁闷 2024-7-25 15:18 |
---|
签到天数: 15 天 [LV.4]偶尔看看III
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
原来对算法没有研究,一直使用自己写的选排,后面感觉效率方面比较低就去了解了一下其他比较高效的算法,
然后觉得快速排序比较好,就自己弄了个
- axlCmdRegister( "00" 'Main)
- ;主函数
- (procedure Main()
- let((Array)
- Array = listToVector(list(10, 2 ,7, 4, 8, 9, 1, 5 ,3 ,6))
- ;打印排序前的数组
- printf("%L" vectorToList(Array))
- printf("\n")
- ;调用快排主函数
- QuickSort(Array 0 length(Array)-1);
- ;打印排序后的数组
- printf("%L" vectorToList(Array))
- )
- )
- ;快速排序主函数
- (procedure QuickSort(Arr Low High)
- let((Pi)
- when(Low<High
- Pi = Partition(Arr Low High)
- ;归地对基准左右两侧进行排序
- QuickSort(Arr Low Pi-1);
- QuickSort(Arr Pi+1 High);
- )
- )
- )
- ;分区函数,将数组分为比基准小和比基准大的两部分
- (procedure Partition(Arr Low High)
- prog((Pivot)
- ;将区间末位元素作为基准
- Pivot = Arr[High]
- ;指向比基准小的元素区间的末尾
- Present = Low-1
- for(item Low High
- ;===============条件判断
- (when Arr[item]<Pivot
- Present++
- Swap(Arr item Present)
- )
- )
- Swap(Arr Present+1 High)
- return(Present+1)
- )
- )
- (procedure Swap(Array X Y)
- Value = Array[X]
- Array[X] = Array[Y]
- Array[Y] = Value
- )
复制代码
|
|