|
选择排序是每次选择出最小的放到已经排好的数组后面,而插入排序是依次选择一个元素,插入到前面已经排好序的数组中间,当然,这是需要已经排好的顺序数组不断移动。步骤描述如下: - 从第一个元素开始,可以认为第一个元素已经排好顺序。
- 取出后面一个元素 n,在前面已经排好顺序的数组里从尾部往头部遍历,假设取出来的元素为 nums,如果 num>n,那么将 nums 移动到后面一个位置,直到找到已经排序的元素小于或者等于新元素的位置,将 n 放到新空出来的位置上。如果没有找到,那么 nums 就是最小的元素,放在第一个位置。
- 重复上面的步骤 2,直到所有元素都插入到正确的位置。
插入排序,分别用汇编语言,C语言,C++,java,python编写出来
当然!以下是插入排序算法的示例代码,分别使用汇编语言、C语言、C++、Java和Python编写:
1. 汇编语言(x86汇编):
- assembly
- section .data
- array db 64, 25, 12, 22, 11
- length equ $ - array
- section .text
- global _start
- _start:
- mov ecx, length
- dec ecx
- outer_loop:
- mov esi, ecx
- mov al, [array + esi]
- mov edi, esi
- inner_loop:
- cmp edi, length
- je skip_shift
- mov dl, [array + edi + 1]
- mov [array + edi + 1], al
- mov al, dl
- inc edi
- jmp inner_loop
- skip_shift:
- mov [array + edi + 1], al
- dec ecx
- jnz outer_loop
- ; 输出排序后的数组
- mov ecx, length
- mov esi, 0
- print_loop:
- movzx eax, byte [array + esi]
- add eax, '0'
- push eax
- push msg_digit
- call printf
- add esp, 8
- inc esi
- loop print_loop
- ; 退出程序
-
复制代码 mov eax, 1
xor ebx, ebx
int 0x80
section .data
msg_digit db "%c ", 0
section .text
extern printf
2. C语言:
- #include <stdio.h>
- void insertionSort(int arr[], int n) {
- int i, j, key;
- for (i = 1; i < n; i++) {
- key = arr[i];
- j = i - 1;
- while (j >= 0 && arr[j] > key) {
- arr[j + 1] = arr[j];
- j = j - 1;
- }
- arr[j + 1] = key;
- }
- }
复制代码 int main() {
int arr[] = {64, 25, 12, 22, 11};
int n = sizeof(arr) / sizeof(arr[0]);
insertionSort(arr, n);
printf("Sorted array: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr);
}
return 0;
}
3. C++:
- #include <iostream>
- using namespace std;
- void insertionSort(int arr[], int n) {
- int i, j, key;
- for (i = 1; i < n; i++) {
- key = arr[i];
- j = i - 1;
- while (j >= 0 && arr[j] > key) {
- arr[j + 1] = arr[j];
- j = j - 1;
- }
- arr[j + 1] = key;
- }
- }
复制代码 int main() {
int arr[] = {64, 25, 12, 22, 11};
int n = sizeof(arr) / sizeof(arr[0]);
insertionSort(arr, n);
cout << "Sorted array: ";
for (int i = 0; i < n; i++) {
cout << arr << " ";
}
return 0;
}
4. Java:
- public class InsertionSort {
- public static void insertionSort(int[] arr) {
- int n = arr.length;
- for (int i = 1; i < n; i++) {
- int key = arr[i];
- int j = i - 1;
- while (j >= 0 && arr[j] > key) {
- arr[j + 1] = arr[j];
- j = j - 1;
- }
- arr[j + 1] = key;
- }
- }
-
- }
复制代码 public static void main(String[] args) {
int[] arr = {64, 25, 12, 22, 11};
insertionSort(arr);
System.out.print("Sorted array: ");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr + " ");
}
}
5. Python:
- def insertionSort(arr):
- for i in range(1, len(arr)):
- key = arr[i]
- j = i - 1
- while j >= 0 and arr[j] > key:
- arr[j + 1] = arr[j]
- j = j - 1
- arr[j + 1] = key
复制代码 arr = [64, 25, 12, 22, 11]
insertionSort(arr)
print("Sorted array:", arr)
这些示例代码展示了如何使用不同的编程语言实现插入排序算法。请根据您的需求和偏好选择适合您的语言。
|
|
|