编程怎么插入排序

时间:2025-01-24 23:41:57 网络游戏

插入排序是一种简单直观的排序算法,其工作原理类似于我们整理扑克牌的过程。它通过将数据分为已排序和未排序两部分,依次将未排序部分的数据插入到已排序部分的正确位置上,从而实现整个数据的排序。以下是插入排序的详细步骤和代码实现:

插入排序的基本步骤

初始状态:

假设第一个元素已经排序好。

选择元素:

从第二个元素开始,依次选择每一个元素。

比较与移动:

将选择的元素与已排序部分的元素从后向前进行比较,找到合适的位置插入。

重复步骤:

重复上述步骤,直到所有元素都排序完毕。

插入排序的代码实现

C 代码实现

```csharp

using System;

class InsertionSort

{

static void Main(string[] args)

{

int[] array = { 5, 2, 4, 6, 1, 3 };

Console.WriteLine("原数组: " + string.Join(", ", array));

InsertionSortAlgorithm(array);

Console.WriteLine("排序后的数组: " + string.Join(", ", array));

}

static void InsertionSortAlgorithm(int[] array)

{

for (int i = 1; i < array.Length; i++)

{

int key = array[i];

int j = i - 1;

while (j >= 0 && array[j] > key)

{

array[j + 1] = array[j]; // 元素向后移动

j = j - 1;

}

array[j + 1] = key; // 插入关键字到正确位置

}

}

}

```

Python 代码实现

```python

def insertion_sort(arr):

for i in range(1, len(arr)):

key = arr[i]

j = i - 1

while j >= 0 and key < arr[j]:

arr[j + 1] = arr[j]

j -= 1

arr[j + 1] = key

arr = [12, 11, 13, 5, 6]

insertion_sort(arr)

print("排序后的数组:", arr)

```

Java 代码实现

```java

public class InsertionSort {

public static void main(String[] args) {

int[] array = {5, 2, 4, 6, 1, 3};

System.out.println("原数组: " + java.util.Arrays.toString(array));

insertionSort(array);

System.out.println("排序后的数组: " + java.util.Arrays.toString(array));

}

public static void insertionSort(int[] array) {

for (int i = 1; i < array.length; i++) {

int key = array[i];

int j = i - 1;

while (j >= 0 && array[j] > key) {

array[j + 1] = array[j]; // 元素向后移动

j = j - 1;

}

array[j + 1] = key; // 插入关键字到正确位置

}

}

}

```

插入排序的时间复杂度

最佳情况:O(n),当输入数组已经是排序好的情况下。

平均情况:O(n^2),当输入数组是随机的情况下。

插入排序是一种稳定的排序方法,适用于少量数据的排序。虽然它的平均时间复杂度为O(n^2),但它的实现简单,适合用于教学和小规模数据的排序。