排序算法(C++/JS/PYTHON/GO/JAVA/PHP实现)--插入排序(三)
2019-01-19 07:24
1426 查看
插入排序
原文链接:https://blog.csdn.net/sylucky/article/details/86548444
欢迎访问我的专栏:https://zhuanlan.zhihu.com/sylucky
总能找到你感兴趣的技术,同时也欢迎投稿。
插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。
1. 算法步骤
-
将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
-
从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
2. 动图演示
3. C++代码实现
//插入排序 vector<int> AlgorithmSort::insertionSort(vector<int> vec) { int len = vec.size(); //边界值判定 if (len <= 1) return vec; for (int i = 0; i < len; i++) { for (int j = len-1; j > 0; j--) { if (vec[j-1] > vec[j]) swap(vec[j-1], vec[j]); } } return vec; }
4. JavaScript 代码实现
function insertionSort(arr) { var len = arr.length; var preIndex, current; for (var i = 1; i < len; i++) { preIndex = i - 1; current = arr[i]; while(preIndex >= 0 && arr[preIndex] > current) { arr[preIndex+1] = arr[preIndex]; preIndex--; } arr[preIndex+1] = current; } return arr; }
5. Python 代码实现
def insertionSort(arr): for i in range(len(arr)): preIndex = i-1 current = arr[i] while preIndex >= 0 and arr[preIndex] > current: arr[preIndex+1] = arr[preIndex] preIndex-=1 arr[preIndex+1] = current return arr
6. Go 代码实现
func insertionSort(arr []int) []int { for i := range arr { preIndex := i - 1 current := arr[i] for preIndex >= 0 && arr[preIndex] > current { arr[preIndex+1] = arr[preIndex] preIndex -= 1 } arr[preIndex+1] = current } return arr }
7. Java 代码实现
public class InsertSort implements IArraySort { @Override public int[] sort(int[] sourceArray) throws Exception { // 对 arr 进行拷贝,不改变参数内容 int[] arr = Arrays.copyOf(sourceArray, sourceArray.length); // 从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个元素,默认是有序的 for (int i = 1; i < arr.length; i++) { // 记录要插入的数据 int tmp = arr[i]; // 从已经排序的序列最右边的开始比较,找到比其小的数 int j = i; while (j > 0 && tmp < arr[j - 1]) { arr[j] = arr[j - 1]; j--; } // 存在比其小的数,插入 if (j != i) { arr[j] = tmp; } } return arr; } }
8. PHP 代码实现
function insertionSort($arr) { $len = count($arr); for ($i = 1; $i < $len; $i++) { $preIndex = $i - 1; $current = $arr[$i]; while($preIndex >= 0 && $arr[$preIndex] > $current) { $arr[$preIndex+1] = $arr[$preIndex]; $preIndex--; } $arr[$preIndex+1] = $current; } return $arr; }
相关文章推荐
- 编程语言拟人化:Java、C++、Python、Ruby、PHP、C#、JS!--隆重推荐转
- Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结
- C、go、python、java、php和node.js 简单循环累加运算速度测试[测试demo仅供参考]
- Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结
- paip.函数方法回调机制跟java php python c++的实现
- Atitit 文件上传 架构设计 实现机制 解决方案 实践java php c#.net js javascript c++ python
- Java C++ Python PHP JS等各种语言中的INT最值
- Atitit.sql ast 表达式 语法树 语法 解析原理与实现 java php c#.net js python
- 2017年的golang、python、php、c++、c、java、Nodejs性能对比(golang python php c++ java Nodejs Performance)
- paip.函数方法回调机制跟java php python c++的实现
- 那些编程语言MM们:Java、C++、Python、Ruby、PHP、C#、JS
- 编程开发(C/C++&Java&Python&JavaScript&Go&PHP&Ruby&Perl&R&Erlang)
- 【一周课表】 第二期 Python、Docker、Linux、 Java、 PHP、数据库、 .NET、Mysql、JS、GO、区块链、UI【分享学习心得得技术图书/CSDN学院定制T恤】)
- paip.提高效率---集合的存取括号方式 uapi java python php js 的实现比较
- Java、C++、Python、Ruby、PHP、C#、JS
- paip.提高效率---集合的存取括号方式 uapi java python php js 的实现比较
- [Java、Php、Python、Flash、C++、Go、Flash开发工具大集合!!!][ide/最全]
- 编程语言拟人化(1):Java、C++、Python、Ruby、PHP、C#、JS的区别
- Java 常用排序算法实现--快速排序、插入排序、选择、冒泡
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)