0
点赞
收藏
分享

微信扫一扫

2024 年 3 月 Web3 游戏报告:市场趋势与投资动态

秀儿2020 04-11 17:30 阅读 2

C语言描述:

#include <stdio.h>

// 交换数组中两个元素的位置
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

// 分区函数,将数组按照基准值划分为两部分
int partition(int arr[], int low, int high) {
    int pivot = arr[high]; // 选取数组最后一个元素作为基准值
    int i = low - 1; // 定义一个指针,初始指向第一个元素的前一个位置

    for (int j = low; j < high; j++) {
        if (arr[j] <= pivot) {
            i++; // 指针向后移动一位
            swap(&arr[i], &arr[j]); // 将小于等于基准值的元素交换到指针位置的左侧
        }
    }
    swap(&arr[i + 1], &arr[high]); // 将基准值交换到指针位置的右侧
    return i + 1; // 返回基准值的位置
}

// 快速排序函数
void quickSort(int arr[], int low, int high) {
    if (low < high) {
        int pivotIndex = partition(arr, low, high); // 获取基准值的位置
        quickSort(arr, low, pivotIndex - 1); // 对基准值左侧的子数组进行快速排序
        quickSort(arr, pivotIndex + 1, high); // 对基准值右侧的子数组进行快速排序
    }
}

int main() {
    int arr[] = {4, 8, 6, 9, 2, 3, 4, 7, 2, 10};
    int n = sizeof(arr) / sizeof(arr[0]);

    // 输出原始数组
    printf("原始数组:\n");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    // 调用快速排序函数
    quickSort(arr, 0, n - 1);

    // 输出排序后的数组
    printf("排序后的数组:\n");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

汇编语言:

INCLUDE irvine32.inc
.data
	dat dd 4,8,6,9,2,3,4,7,2,10
	cnt dd ?
	l dd ?
	r dd ?
.code
start:
	mov eax,10
	mov cnt,eax
	call scanf
	;初始化l,r
	mov eax,0
	mov l,eax;
	mov eax,9
	mov r,eax
	;调用快排
	call quicksort
	call print
	exit
;封装交换函数
swap proc 
	;利用xchg 可以少用一个寄存器来充当临时变量
	mov edx,dat[esi*4];
	xchg edx,dat[ebx*4];
	xchg edx,dat[esi*4];
	ret
swap endp
 
quicksort proc
	mov eax,l
	cmp eax,r
	jg over
	xor esi,esi;
	xor ebx,ebx;
	mov esi,l;i
	mov ebx,r;j
	mov eax,dat[esi*4] 
	sort_again:
	cmp ebx,esi;				while (i!=j)
	je over_loop;
		loop_j_again:
			cmp esi,ebx; 			while(i<j)
			jge over_loop
			cmp eax,dat[ebx*4]; 	while (a[j]>=a[l])
			jg loop_i_again
			add ebx ,-1			;		j--
			jmp loop_j_again;	
		loop_i_again:
			cmp esi,ebx; 			while (i<j)
			jge over_loop
			cmp eax,dat[esi*4]; 	while (a[l]>=a[i])
			jl compare;
			add esi,1;					i++
			jmp loop_i_again;
		compare:
			cmp esi,ebx;			if (i>=j)
			jge over_loop;				break
			call swap;				swap(i,j)
	jmp sort_again
	over_loop:
		mov ebx,l;
		call swap;				swap(i,l)
		push esi; push i
		push r  ;push r
		mov r,esi
		add r ,-1
		call quicksort;			quicksort(l,i-1);
		pop r
		pop ebx
		mov l,ebx;
		inc l
		call quicksort;			quicksort(i+1,r);
	over:
		ret
quicksort endp
 
;封装一个输出函数
print proc
	mov ecx,cnt
	xor esi,esi
print_again:
			mov eax,dat[esi*4]
			call writeint
			call crlf
			inc esi;
			loop print_again
	ret
print endp
;封装输入函数
scanf proc
	mov ecx,cnt
	xor esi,esi
scanf_again:	
			call readint
			mov dat[esi*4],eax
			inc esi;
			loop scanf_again
	ret
scanf endp
end start

运行结果:

在这里插入图片描述

举报

相关推荐

0 条评论