插入排序
来源:互联网 发布:k核分析 社会网络 编辑:程序博客网 时间:2024/06/06 06:35
插入排序:
1、直接插入:
每次移动当前元素之前的数列都是有序的。
2、希尔排序
先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。
操作方法:
- 选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1;
- 按增量序列个数k,对序列进行k 趟排序;
- 每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。
#include<iostream.h> #include<string> int* insert(int*str, int n){ //直接插入 int key=0; for(int i=1;i<n+1;i++){ key=str[i];//key=a[i] int j=i-1; while((str[j]>key)&&(j>0)){//找到位置 j--; } //cout<<j+1<<endl; int k=i-1; for(k;k>=j+1;k--){//向后挪位置 str[k+1]=str[k]; } str[j+1]=key; } return str; }int *shell(int *str,int n){int gap=n/2;//步长cout<<"gap"<<gap<<endl;int j=1;int i=1;for(gap;gap>=1;gap=gap/2){//设每次步长设为原来步长的1/2int tmp[100];tmp[0]=0;//哨兵for(j;j<=gap;j++){tmp[j]=str[(j-1)*gap+1];}insert(tmp,n/gap);//每组n/2个数for(i;i<=gap;i++){str[(i-1)*gap+1]=tmp[i];}}//insert(str,n);//步长为1时 return str;}void main() { int str[100]; int n; cout<<"input n:"<<endl; cin>>n; cout<<"input numbers:"<<endl; int i=1; str[0]=0; //哨兵 for(i;i<n+1;i++) cin>>str[i]; int*b; //b=insert(str,n); b=shell(str,n); cout<<endl; for(int j=1;j<n+1;j++){ cout<<b[j]<<endl; } }
0 0
- 插入排序-【插入排序】
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 【leetcode】【8】String to Integer (atoi)
- 数据分析学习
- 修改ssh 配置 取消 使用dns
- leetcode之Binary Search Tree Iterator
- 第一行代码-9.4 服务的生命周期
- 插入排序
- TextView属性大全+单行显示长文本
- 如何快速配置CentOS的时间同步
- iOS中Layer的认识和使用
- 开发常用工具
- 自作農創定을 爲한 全面土地買收計劃
- SQLAlchemy指南(tutorial)
- bzoj1411 硬币游戏 分治
- 判断Fragment是否可见,填坑