插入排序、选择排序和二分查找

简介: 插入排序、选择排序和二分查找

插入排序、选择排序和二分查找是常见的排序和查找算法,它们在数据处理和算法设计中都有着重要的作用。下面分别介绍这三种算法的基本原理和实现。

 

插入排序(Insertion Sort) 

插入排序的基本思想是将未排序的元素逐个插入到已排序的部分中,从而将整个序列排序。具体步骤如下:

1. 从第一个元素开始,该元素可以认为已经被排序。

2. 取出下一个元素,在已经排序的元素序列中从后向前扫描。

3. 如果已排序元素大于新元素,将该已排序元素移到下一位置。

4. 重复步骤3,直到找到已排序的元素小于或等于新元素的位置。

5. 将新元素插入到该位置后。

6. 重复步骤2~5。

 

实现插入排序的 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)
```

选择排序(Selection Sort)

选择排序的基本思想是每次从待排序的数据中选出最小(或最大)的一个元素,放在已排好序的数据的末尾(或开头),直到所有元素排完为止。具体步骤如下:

1. 在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置。

2. 从剩余未排序元素中继续寻找最小(或最大)元素,放到已排序序列的末尾。

3. 重复步骤1~2,直到所有元素排序完毕。

 

实现选择排序的 Python 代码如下:

```python
def selection_sort(arr):
    for i in range(len(arr)):
        min_idx = i
        for j in range(i + 1, len(arr)):
            if arr[j] < arr[min_idx]:
                min_idx = j
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
 
# 示例
arr = [64, 25, 12, 22, 11]
selection_sort(arr)
print("排序后的数组:", arr)
```

二分查找(Binary Search)


二分查找要求待查找的序列是有序的。它的基本思想是通过每次将待查找区间对半分,来缩小查找范围。具体步骤如下:

1. 确定查找范围的起始点 `start` 和结束点 `end`,分别指向序列的第一个元素和最后一个元素。

2. 计算中间点 `mid`,即 `(start + end) // 2`。

3. 如果目标值等于中间点的值,则查找成功;如果小于中间点的值,则在左半部分继续查找;如果大于中间点的值,则在右半部分继续查找。

4. 重复步骤2~3,直到找到目标值或查找范围缩小到空。

 

实现二分查找的 Python 代码如下:

```python
def binary_search(arr, target):
    start, end = 0, len(arr) - 1
    while start <= end:
        mid = (start + end) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            start = mid + 1
        else:
            end = mid - 1
    return -1
 
# 示例
arr = [2, 3, 4, 10, 40]
target = 10
result = binary_search(arr, target)
if result != -1:
    print("元素在索引 %d" % result)
else:
    print("元素不在数组中")
```

 

以上就是插入排序、选择排序和二分查找的基本原理和实现。这些算法在实际应用中都有着重要的作用,能够帮助我们有效地处理和操作数据。

相关文章
|
5月前
|
存储 搜索推荐 算法
|
6月前
|
搜索推荐
冒泡排序、选择排序、二分查找
冒泡排序、选择排序、二分查找
21 0
|
存储 搜索推荐 算法
八大排序算法-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序、基数排序(下)
八大排序算法-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序、基数排序(下)
|
搜索推荐 算法
排序算法:冒泡排序,插入排序,选择排序,归并排序,快速排序
排序算法:冒泡排序,插入排序,选择排序,归并排序,快速排序
|
搜索推荐 算法
八大排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序、基数排序(上)2
八大排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序、基数排序(上)2
|
搜索推荐 算法 Shell
八大排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序、基数排序(上)1
八大排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序、基数排序(上)1
173 0
|
算法 搜索推荐
选择排序之简单选择排序
选择排序之简单选择排序
89 0
|
算法 搜索推荐
简单选择排序,直接插入排序、冒泡排序
简单选择排序,直接插入排序、冒泡排序
|
搜索推荐
冒泡排序,选择排序,直接插入排序
🐰冒泡排序 🐰选择排序 🐰直接插入排序