【排序算法】直接插入排序
2016-03-02 12:23
330 查看
数据结构课程中的好多排序算法都已经学过了,但过了一年还是忘了好多,仅仅只会冒泡,选择,所以最近计划把其他排序算法也好好温习巩固一下!!!
直接插入排序:
假设待排序的元素存放在数组R[0...n-1]中,排序过程中的某一时刻,R被划分成两个子区间R[0...i-1]和R[i...n-1](刚开始时i = 1,有序区只有R[0]一个元素),其中,前一个子区间是已经排好序的有序区,后一个区间则是当前未排序的部分,不放称其为无序区。
直接插入排序的一趟操作是将当前无序区的开头元素R[i](1<=i<n-1)插到有序区R[0...i-1]中的适当位置上,使R[0...i]变为新的有序区。这样使得每趟操作使有序区增加一个元素,这叫做增量法。
C语言的代码如下:
直接插入排序:
假设待排序的元素存放在数组R[0...n-1]中,排序过程中的某一时刻,R被划分成两个子区间R[0...i-1]和R[i...n-1](刚开始时i = 1,有序区只有R[0]一个元素),其中,前一个子区间是已经排好序的有序区,后一个区间则是当前未排序的部分,不放称其为无序区。
直接插入排序的一趟操作是将当前无序区的开头元素R[i](1<=i<n-1)插到有序区R[0...i-1]中的适当位置上,使R[0...i]变为新的有序区。这样使得每趟操作使有序区增加一个元素,这叫做增量法。
C语言的代码如下:
#include<stdio.h> /** 快速排序: 1.将初始序列R 分为2部分:R[0],R[1,N-1]; 2.从R[1,N-1]选取第一个元素,加入到R[0]中的合适位置中,使其R[0...1]为有序序列; 3.重复上述步骤 注意问题:经过每一趟的循环,有的元素会改变位置,向有序序列插入时,无序序列和有序序列元素位置都会 改变,因为需要将目标元素合适位置的后面的元素后移 */ void insertSort(int a[],int n){ int i,j; int temp; for(i = 1;i<n;i++){ temp = a[i]; /*如果temp小于当前已经排序好的集合的最大的一个元素,则表示最大的依次后移, 并把a[i]覆盖掉,这就是为啥要定义一个temp的原因 */ for(j= i-1;j>=0&&temp<a[j];j--){ a[j+1] = a[j]; } a[j+1] = temp ; } } int main(){ int a[7] ={6,5,10,18,25,4,1}; insertSort(a,7); for(int i = 0;i<7;i++){ printf( " %d ",a[i]); } return 0; }
相关文章推荐
- 使用Aspose.Word的基础知识整理
- 2、Android自己的下拉刷新SwipeRefreshLayout--样式2
- Android RecyclerView 使用完全解析 体验艺术般的控件
- java中抽象类的粗浅理解
- 全局获取Context的技巧
- 让32位Eclipse和64位Eclipse同时在64的Windows7上运行
- linux 统一认证方式实现
- Django~待解决的问题
- VS2010 Ctrl + F5 控制台模式设置
- github的使用经历
- ORA-15028: ASM file '..' not dropped; currently being accessed --转载
- linux-proc
- Hive 的安装部署和测试
- 推荐一个java开源项目 JeeSite
- 分享几套程序员入门教程,说不准有您需要的噢
- 使用dryrun直接运行github项目查看效果
- javascript高级程序设计笔记-第六章(面向对象编程)
- 深度学习研究组Deep Learning Research Groups
- 深度学习数据集Deep Learning Datasets
- 深度学习阅读列表 Deep Learning Reading List