排序算法C++ && Python实现---直接插入排序
2017-04-26 15:30
295 查看
算法思想:
直接插入排序的思想是:从待排序序列的第一个元素开始,依次比较相邻的两个元素,若后者小于前者(从小到大排序),则将后者作为哨兵,插入到序列中的正确位置。
那么问题来了,怎么样才能将哨兵插入到正确的位置呢?这就是下面需要着重解决的问题。
考虑,第i个元素作为哨兵,则意味着data[i-1]>data[i]的,且经过前面的排序后,前面的0~i-1个元素已经从小到大排好序了。那么,可以从第i-1个元素开始,向序列首部方向,依次比较与哨兵的大小,若大于哨兵,则向后移动一个单位,如小于哨兵,则将哨兵插入到此元素之后。
C++实现(IDE: VS2012)
3 Python实现(Python 2.7)
直接插入排序的思想是:从待排序序列的第一个元素开始,依次比较相邻的两个元素,若后者小于前者(从小到大排序),则将后者作为哨兵,插入到序列中的正确位置。
那么问题来了,怎么样才能将哨兵插入到正确的位置呢?这就是下面需要着重解决的问题。
考虑,第i个元素作为哨兵,则意味着data[i-1]>data[i]的,且经过前面的排序后,前面的0~i-1个元素已经从小到大排好序了。那么,可以从第i-1个元素开始,向序列首部方向,依次比较与哨兵的大小,若大于哨兵,则向后移动一个单位,如小于哨兵,则将哨兵插入到此元素之后。
C++实现(IDE: VS2012)
//打印排序结果函数 void Print(int a[],int n,int i=0) { //cout<<i<<endl; cout<<"排序后的结果为:"<<endl; for(int i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl; } //插入排序---直接插入排序,时间复杂度O(N^2) void ZhiJieChaRuPaiXu(int a[8],int n) //函数输入参数---数组a中存有待排序数据,n为数据个数 { for(int i=1;i<n;i++) //待排序数组长度为n { if(a[i]<a[i-1]){ int j=i-1; int x=a[i]; //复制哨兵,将参考值保存 while(x<a[j]) //判断坐标i之前的每个数值,若大于参考值 { a[j+1]=a[j]; //将值向前移动 j--; //坐标值前移 } a[j+1]=x; //若第j个数据不再小于参考值,则将参考值插入到j+1位置 } Print(a,n,i); } }
3 Python实现(Python 2.7)
'''输出排序结果函数''' def Print(ddata): n=len(ddata) for i in range(n): print ddata[i], #其中","为了不让其输出默认的换行符 '''插入排序---直接插入排序''' def ZhiJieChaRuPaiXu(data): n=len(data) for i in range(1,n): if(data[i]<data[i-1]): ShaoBing=data[i] j=i-1 while(ShaoBing<data[j]): #每次移动一个数据 data[j+1]=data[j] j=j-1 if(j==-1): #当j为-1时,表明ShaoBing为最小元素, data[0]=ShaoBing break data[j+1]=ShaoBing Print(data)
相关文章推荐
- 排序算法总结(冒泡排序、直接插入排序、希尔排序)(python实现)
- 直接插入排序法 -- Python实现
- 八大排序算法的python实现(一)直接插入排序
- 直接插入排序 Python实现
- python 实现的 直接插入排序法
- 直接插入排序 Python实现
- 直接插入排序(JAVA实现)
- mips程序设计——直接插入排序的递归与非递归实现(spim模拟)
- 直接排序算法python实现
- 插入排序之直接插入排序(java实现)
- 白话经典算法系列之二 直接插入排序的三种实现
- 白话经典算法系列之二 直接插入排序的三种实现
- 数据结构--直接插入排序实现
- 程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现)
- python算法实践1-直接插入排序
- 插入排序算法--直接插入算法,折半排序算法,希尔排序算法(C#实现)
- 经典排序算法-MFC实现之4:直接插入排序
- c++ 模板实现 -- 直接插入排序和归并排序
- 用JAVA实现排序算法之二:直接插入排序
- 插入排序--直接插入排序[Java实现]