插排的递归和非递归实现
2013-10-22 11:01
148 查看
插排的非递归很简单,用两层循环即可搞定,因此时间复杂度为O(n^2),空间复杂度为O(1)。
代码如下:
插排递归实现,可以调用自身n-1次,找到之后n-1个元素的正确位置插入进去,时间复杂度也是O(n^2),空间复杂度为O(n)。
代码如下:
个人观点:
不建议使用递归写插排,之所以去实现是因为笔试中,要求写插排递归实现。
代码如下:
void InsertSort(int* pArr, int len) { if (len<2) return; int key, j; for (int i = 1; i < len; ++i ) { key = pArr[i]; //记录当前要排序的元素 for (j = i-1; j >= 0; --j) { if ( key >= pArr[j] ) break; else pArr[j+1] = pArr[j]; } pArr[j+1] = key; } }
插排递归实现,可以调用自身n-1次,找到之后n-1个元素的正确位置插入进去,时间复杂度也是O(n^2),空间复杂度为O(n)。
代码如下:
//将pArr数组中的第index位元素放入到其已排好序的数组中,数组总长度为len void InsertSortRecursion(int* pArr, int index, int len) { if (len<2) //仅有一个元素无需排序 return; int key = pArr[index]; //待排序元素 int i = index-1; //已排好序的最后一位元素下标 if ( index < len ) { for (; i>=0; i--) { if ( key >= pArr[i] ) break; else //当前位赋值到下一位上 pArr[i+1] = pArr[i]; } pArr[i+1] = key; //将key放入正确的位置 InsertSortRecursion(pArr, index+1, len); } }
个人观点:
不建议使用递归写插排,之所以去实现是因为笔试中,要求写插排递归实现。
相关文章推荐
- 递归实现求最大子串和
- 中序线索化二叉树:递归实现
- [置顶] 菜单树的java实现(菜单非递归实现)
- java实现递归文件列表的方法
- 用递归的方法实现输出一个十进制数的每一位
- python 全排列 递归中的两种实现
- Binary Search 的递归与迭代实现及STL中的搜索相关内容
- 二叉树的非递归实现【菜鸟学习日记】
- hdu 1856 More is better(find函数的递归实现比while循环快7.8倍)
- *二叉树的基本操作(递归实现)*
- ReactiveSwift源码解析(十一) Atomic的代码实现以及其中的Defer延迟、Posix互斥锁、递归锁
- java代码实现递归@oneToMany
- C# 实现阶乘 (递归,非递归) 实现代码
- C 二分查找 递归与非递归的实现代码
- DP 之 CODE[VS] 1048 石子归并 (两种实现方式:递归,循环)
- Fibonacci 非递归实现
- c++快速查找实现(递归和非递归)
- MySQL实现递归调用,查询组织架构树
- js实现后管无限级菜单递归一
- 迷宫基于栈的实现--最短路径的非递归实现