Vfp 10个数快速排序法如何编写算法从小到大排序,请帮忙

zhyyqqll 2021-02-08 07:46:04
Vfp 10个数快速排序法如何编写算法从小到大排序,请帮忙
快速排序法
一、先选择一个基准数,数组中的其它数据分别和这个基准数进行比较,
二、将小于基准数的数字放入一个数组中,将大于基准数的数字放入另一个数组中
三、重复这个过程

clear
dimension a(10)
a(1)=142
a(2)=120
a(3)=452
a(4)=23
a(5)=89
a(6)=42
a(7)=865
a(8)=140
a(9)=453
a(10)=147
???
...全文
574 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenlancwz1 2021-12-12
  • 打赏
  • 举报
回复

用冒泡法:
DIMENSION Tr(10)
FOR i=1 TO ALEN(Tr)-1
FOR x=i+1 TO ALEN(Tr)
IF Tr(i)<Tr(x)
Temp=Tr(i)
Tr(i)=Tr(x)
Tr(x)=temp
ENDIF
ENDFOR
ENDFOR

sych11 2021-02-09
  • 打赏
  • 举报
回复
怎么还在用vfp
zhyyqqll 2021-02-09
  • 打赏
  • 举报
回复
已经很漂亮了,谢谢
mywisdom88 2021-02-09
  • 打赏
  • 举报
回复
但有个缺点,因为使用递归,会有 递归层次数量限制。数组个数几千后,就可能会错误
mywisdom88 2021-02-09
  • 打赏
  • 举报
回复 1

RAND(-1)
#DEFINE N1 10 && 数组个数

DIMENSION Ary1[N1]

FOR i=1 TO N1
Ary1[i] = INT(RAND()*100)
?Ary1[i]
ENDFOR
?" QuickSort"
QuickSort(@Ary1,1,N1)

FOR i=1 TO N1
?Ary1[i]
ENDFOR


FUNCTION QuickSort
PARAMETERS Ary[N1],Left1,Right1
LOCAL L1,R1,Flag1,Tmp
IF Left1 >= Right1
   RETURN
ENDIF
L1 = Left1
R1 = Right1
Flag1 = Ary[Left1]

DO WHILE L1 < R1
   *!* 先从右边找
   DO WHILE Ary[R1] >= Flag1 AND L1 < R1
      R1 = R1 -1
   ENDDO
   *!* 再从左边找
   DO WHILE Ary[L1] <= Flag1 AND L1 < R1
      L1 = L1 +1
   ENDDO 
   *!* 交换数据
   IF L1 < R1
      Tmp = Ary[L1]
      Ary[L1] = Ary[R1]
      Ary[R1] = Tmp
   ENDIF
ENDDO

*!* 递归交换
Ary[Left1] = Ary[L1]
Ary[L1] = Flag1
QuickSort(@Ary,Left1,R1-1)
QuickSort(@Ary,L1+1,Right1)

ENDFUNC
zhyyqqll 2021-02-09
  • 打赏
  • 举报
回复
怎么自定义函数传递调用?
zhyyqqll 2021-02-09
  • 打赏
  • 举报
回复
def quick_sort(a_list, start, end): #"""快速排序""" if start >= end: return # 定义一个基准 mid = a_list[start] left = start right = end # 如果left与right未重合, left就向中间(右)移动 while left < right: while left < right and a_list[right] >= mid: right -= 1 a_list[left] = a_list[right] while left < right and a_list[left] < mid: left += 1 a_list[right] = a_list[left] # 从循环退出后, left与right相遇, 即 left==right a_list[left] = mid # 用递归对左边部分执行快速排序 quick_sort(a_list, start, left-1) # 用递归对右边部分执行快速排序 quick_sort(a_list, left+1, end) if 1 ==1: li = [54, 26, 93, 17, 77, 31, 44, 55, 20] print(li) quick_sort(li, 0, len(li)-1) print(li) ----------------------- 看到网上有PYTHON可以通过的脚本,怎么转成VFP的脚本。
mywisdom88 2021-02-09
  • 打赏
  • 举报
回复
VFP本身就有数组排序函数 ASORT( ) 函数 Asort(a,1,-1,1,0)
shenlancwz1 2021-12-12
  • 举报
回复
@mywisdom88 ASORT只能对字符排序

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧