每天一个小程序(10)——直接插入排序
2014-03-25 10:57
267 查看
插入排序的基本思想:
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置
算法是这样的,数组的第0位为保存带记录的R[i]的值,以免在移动中被覆盖而丢失。从第2位开始将元素暂存在R[0]中,从第2位前面开始比较,若R[0]小于R[1],将R[1]后移到R[2]中,位置标记j 前移,直到没有比R[0]大的值后,将R[0]放到R[j+1]中,这样就完成了一趟比较,R[1]和R[2]为有序的,接下来i++,进行下一趟排序。
首先是顺序表排序
链表插入排序,链表函数参考双链表,传送门双向链表
算法分析
稳定性:稳定的
时间复杂度:O(n^2)
最快的情况:正序
最慢的情况:逆序
趟数为n-1趟
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置
算法是这样的,数组的第0位为保存带记录的R[i]的值,以免在移动中被覆盖而丢失。从第2位开始将元素暂存在R[0]中,从第2位前面开始比较,若R[0]小于R[1],将R[1]后移到R[2]中,位置标记j 前移,直到没有比R[0]大的值后,将R[0]放到R[j+1]中,这样就完成了一趟比较,R[1]和R[2]为有序的,接下来i++,进行下一趟排序。
首先是顺序表排序
//顺序表插入排序 void ins_sort(datatype1 R[],int n) { int i,j; for(i = 2; i <= n; i++) { R[0] = R[i]; j = i - 1; while(R[0].key < R[j].key)//比较R[0]和j值 { R[j+1] = R[j];//若小于,则j值后移 j--; } R[j+1] = R[0]; } }
链表插入排序,链表函数参考双链表,传送门双向链表
//链表插入排序 void ins_sort2(DuLinkList L) { DuLinkList p = L->next->next; datatype data; DuLinkList q; while(p != L) { data = p->data; q = p->prior; while(data < q->data) { q->next->data = q->data; q = q->prior; } q->next->data = data; p = p->next; } }
算法分析
稳定性:稳定的
时间复杂度:O(n^2)
最快的情况:正序
最慢的情况:逆序
趟数为n-1趟
相关文章推荐
- 一个快速排序 和 直接插入排序 的简单 c程序
- 直接插入排序 一个简单示例
- 每天一个python小程序 3向Redis数据库中插入数据
- 每天一个小程序(2)——带头结点的链表的创建以及插入和删除
- 每天一个小程序——选择排序时的一个小问题!
- java程序:在排序好的数组中添加一个数字,将添加后的数字插入到数组合适的位置。怎么写啊?
- 每天一个C++小程序(十五)--快速排序
- java程序:一个排序好的数组,增加一个数插入到合适的位置保存到另外个数组,输出
- 每天一个c++小程序(1):快速排序
- 10-1-直接插入排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版
- 60}的C程序 高手帮忙写下`` 46 35 27 21 16 10 9 5 然后输出数组a。已知 int a[11]={1 使数组a仍然有序 将x插入到有序整型数组a中 由键盘输入一个整数x
- 每天一个小程序(15)——交换排序之快速排序
- Java程序实现冒泡排序、直接排序、插入排序方法
- 一个直接插入排序算法程序
- ACM题目:第一行输入n m,第二行输入一个数列,n为数列长度,m为要插入的值,排序后输出,m n为零时退出程序
- 每天一个小程序(16)——交换排序之快速排序2
- 数据结构学习10——直接插入排序与希尔排序
- 面试题,小程序,在一个排序完毕的数组中,按顺序插入一个数
- 每天一个小程序(12)——交换排序之冒泡排序
- 数据结构10-排序方法之直接插入排序的实例