IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 插入排序算法:折半插入排序 -> 正文阅读

[数据结构与算法]插入排序算法:折半插入排序

插入排序算法:折半插入排序

1.简介

插入排序算法思想:将待排序元素分为已排序子集和待排序子集,依次从待排序子集选择一个元素插入到已排序子集中,使已排序子集仍然有序。重复以上过程直到所有元素都有序为止。

排序规则:

  1. 假总共有n个需要排序,那么待排序有n-1,第1个元素默认有序
  2. 以索引1切分,前面为有序子集,后面为无序子集
  3. 将无序子集中取出1个元素a,按折半查找(二分查找)从有序子集中找到第一个大于a的位置b,从位置b开始的所有有序子集元素向右偏移1位,在a放入到位置b。如果有序子集中没有数据大于a,将a放到有序子集末尾
  4. 重复步骤3直到无序子集为空

2.图示

注意:图示没有二分查找索引位置的过程

binary-insertion-sort

3.演示

3.1.文件树型图

binary-insertion-sort
├── binary-insertion-sort.go
└── binary-insertion-sort_test.go

3.2.代码

binary-insertion-sort.go

package binary_insertion_sort

func BinaryInsertSort(arr []int) {
	length := len(arr)
	var low, high, mid int

	for i := 1; i < length; i++ {
		t := arr[i]
		// binary search
		for low, high = 0, i-1; high >= low; {
			mid = (low + high) / 2
			if t < arr[mid] {
				high = mid - 1
			} else {
				low = mid + 1
			}
		}

		// backward offset 1
		for j := i - 1; j >= low; j-- {
			arr[j+1] = arr[j]
		}
		// insert data
		arr[low] = t
	}
}

binary-insertion-sort_test.go

package binary_insertion_sort

import "testing"

func TestBinaryInsertSort(t *testing.T) {
	arr := []int{3, 1, 9, 20, 4}
	BinaryInsertSort(arr)
	t.Log(arr)
}

3.3.测试

=== RUN   TestInsertSort
    straight-insertion-sort_test.go:8: [12 20 24 34 53]
--- PASS: TestInsertSort (0.00s)
PASS

4.参考

  • 《C/C++函数与算法速查手册》
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-26 12:18:24  更:2021-07-26 12:19:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:35:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码