X86汇编语言(四)

快速排序的非递归实现

include Irvine32.inc
arraySize = 250000
.data
	array DWORD arraySize dup(?)
	pivot DWORD ?
	starttime dword ?
.code
main PROC
	call Randomize
	mov ecx,arraySize
	mov esi,0
	mov eax,arraySize
L1:
	call Random32

	mov array[esi*type array],eax
	inc esi
	loop L1

	call GetMseconds
	mov starttime,eax
	mov eax,0
	mov ebx,arraySize -1
	call quickSort

	call GetMseconds
	sub eax,starttime
	call WriteInt
	call Crlf
	exit
main endp
Partition proc
	pushad
	mov edx,array[eax*type array]
L1:
	cmp eax,ebx
	jae stop
	L2:
		cmp eax,ebx
		jae L3
		cmp array[ebx*type array],edx
		jl L3
		dec ebx
		jmp L2
	L3:
	mov ecx,array[ebx*type array]
	mov array[eax*type array],ecx
	L4:
		cmp eax,ebx
		jae L5
		cmp array[eax*type array],edx
		jg L5
		inc eax
		jmp L4
	L5:
	mov ecx,array[eax*type array]
	mov array[ebx*type array],ecx
	jmp L1
stop:
	mov array[eax*type array],edx
	mov pivot,eax
	popad
	ret
Partition endp
quickSort proc
	pushad
.data
	temp DWORD 0
.code
	mov temp,esp
	push eax
	push ebx
L1:
	cmp esp,temp
	je stop
	pop ebx
	pop eax
	call Partition
	dec pivot
	cmp eax,pivot
	jge L2
	push eax
	push pivot
L2:
	add pivot,2
	cmp ebx,pivot
	jle L3
	push pivot
	push ebx
L3:
	jmp L1
stop:
	popad
	ret
quickSort endp
END main
使用汇编语言实现的非递归的快速排序程序,其中,使用eax与ebx传递待排数组下标范围。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值