C语言描述:
#include <stdio.h> // 选择排序函数 void selectionSort(int arr[], int n) { int i, j, minIndex, temp; for (i = 0; i < n - 1; i++) { minIndex = i; // 寻找最小元素的下标 for (j = i + 1; j < n; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } // 将最小元素与当前元素交换位置 temp = arr[minIndex]; arr[minIndex] = arr[i]; arr[i] = temp; } } int main() { int arr[] = {5, 2, 8, 1, 6}; int n = sizeof(arr) / sizeof(arr[0]); int i; // 调用选择排序函数进行排序 selectionSort(arr, n); // 输出排序后的数组 printf("排序后的数组:\n"); for (i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; }
汇编语言:
include irvine32.inc .data array dword 5, 2, 8, 1, 6 ; 待排序的数组 len = ($ - array) / 4 ; 数组长度 msg db "Sorted array: ", 0 .code main proc mov esi, 0 ; 初始化外层循环计数器 i outer_loop: cmp esi, len ; 比较 i 和数组长度 jge end_sort ; 如果 i >= len,跳转到结束排序 mov edi, esi ; 初始化最小值索引为 i mov eax, array[esi*4] ; 将当前元素作为最小值 mov ecx, esi ; 初始化内层循环计数器 j inner_loop: inc ecx ; j++ cmp ecx, len ; 比较 j 和数组长度 jge update_min ; 如果 j >= len,跳转到更新最小值 mov edx, array[ecx*4] ; 取出 array[j] cmp edx, eax ; 比较 array[j] 和最小值 jge inner_loop ; 如果 array[j] >= 最小值,继续内层循环 mov eax, edx ; 更新最小值 mov edi, ecx ; 更新最小值索引 jmp inner_loop ; 继续内层循环 update_min: ; 交换 array[i] 和 array[edi] mov ebx, array[esi*4] mov edx, array[edi*4] mov array[esi*4], edx mov array[edi*4], ebx inc esi ; i++ jmp outer_loop ; 继续外层循环 end_sort: call crlf mov esi, 0 ; 初始化循环计数器 mov edx, offset msg call writestring print_array: mov eax, array[esi*4] ; 取出数组元素 call writeint ; 输出数组元素到屏幕 call crlf inc esi ; 计数器加一 cmp esi, len ; 比较计数器和数组长度 jl print_array ; 若计数器小于数组长度,则继续输出 exit main endp end main
运行结果: