插入排序(顺序数组中找要插入元素的位置)
2015-10-08 09:56
267 查看
插入排序的算法思想十分简单,就是对待排序的数组进行处理,数组中的每个元素都同已排好的数组中的元素进行比较,然后插入到适当的位置。插入排序关键在于如何将待排元素插入到已经排好数组中的适当位置。 方法一:使用顺序查找的方法,找到待排元素要插入的位置。
/*插入排序:空间复杂度为o(1);数组为正序排列时,直接插入排序的时间复杂度为o(n);数组为逆序排列时,直接插入排序的时间复杂度为o(n*n);直接插入排序的平均时间复杂度为o(n*n);直接插入排序为稳定排序算法。*/ #include<iostream> using namespace std; void insert_sort(int arr[],int len) { //判断参数是否合法 if(arr == NULL || len <= 0) return; //从数组中的第二个元素开始 for(int i = 1; i < len; ++i) { //设置一个临时变量,存储待排的元素。 int tmp = arr[i]; int j = 0;//设置一个变量,存储要插入插入的位置。 for(j = i; j > 0; --j) { if(arr[j - 1] > tmp) arr[j] = arr[j - 1];//把当前元素向后移动一位 else break; } arr[j] = tmp; } } int main(void) { int arr[] = {2, 3, 2, 5, 2, 7}; insert_sort(arr,6); for(int i = 0; i < 6; ++i) { cout<<arr[i]<<endl; } system("pause"); return 0; } /*运行结果*/ 2 2 2 3 5 7
方法二:使用二分查找的方法,找到待排元素要插入的位置。
//找到要插入元素的位置,如果待插入的元素比数组中最大的元素还要大,则返回最后一个位置。
int setPos(int arr[], int n, int val) { int start = 0;//设置起始位置 int end = n - 1;//设置终点位置 int mid = 0;//设置中间位置 while(start <= end) { mid = (start + end) / 2; if(arr[mid] <= val) { start = mid + 1; } else if(arr[mid] > val) { end = mid - 1; } else { break; } }if(mid < low) mid = low; return mid; } void bInsert_sort(int arr[], int len) { for(int i = 1; i < len; ++i) { int tmp = arr[i]; if(arr[i - 1] < tmp)//待排的元素比最后一个元素要大,继续下一次循环 continue; int pos = setPos(arr,i,tmp); for(int j = i; j >= pos; j--) { arr[j] = arr[j - 1]; } arr[pos] = tmp; } } int main(void) { int arr[] = {45, 34, 78, 12, 34, 32, 29, 64}; bInsert_sort(arr,8); for(int i = 0; i < 8; ++i) { cout<<arr[i]<<endl; } system("pause"); return 0; } /*运行结果*/ 12 29 32 34 34 45 64 78
相关文章推荐
- 将带图片的Java工程用eclipse打包成jar,然后用exe4j将jar打包成exe,并附带jre库
- Web.xml详解
- LeetCode 51 N-Queens
- ZOJ 3471 Most Powerful (状压DP,经典)
- XAMPP+Mantis安装步骤
- jdk1.7 windows
- ATL opengl
- Binary Search Tree Iterator 解答
- Dynamics CRM Import Solution Attribute Display Name description is null or empty
- DG相关查询
- cocos 游戏移植到 Windows10 之路 -- 环境搭建
- 实用的java代码片段
- Dynamics CRM Import Solution Attribute Display Name description is null or empty
- Dynamics CRM Import Solution Attribute Display Name description is null or empty
- Dynamics CRM Import Solution Attribute Display Name description is null or empty
- 正则表达式 学习小结
- 零基础免费搭建个人博客-hexo+github
- iOS开发-捕获程序崩溃日志
- Code First 迁移更新数据库
- Android 自定义对话框