插入排序
来源:互联网 发布:类似ostagram的软件 编辑:程序博客网 时间:2024/06/06 04:20
直接插入排序(稳定)
#include<iostream>using namespace std;void insertsort(int a[],int n){int i,j,x;for(i=1;i<n;i++){if(a[i]<a[i-1]){x=a[i]; //x定为哨兵for(j=i-1;j>=0&&x<a[j];j--) //向前依次寻找插入位置a[j+1]=a[j];a[j+1]=x; //插入}}}int main(){int i;int a[5]={2,3,5,6,7};insertsort(a,5);for(i=0;i<5;i++)cout<<a[i]<<" ";}
折半插入排序(稳定)
直接插入排序的改进(引入了二分查找)
#include<iostream>using namespace std;void sort(int a[],int n) {int i,j;for(i=1;i<n;i++){int tmp=a[i],low=0,high=i-1,mid;//low到high之间为前面已排好的序列while(low<=high) //寻找插入位置,即最终low位置之前{mid=(low+high)/2;if(tmp>a[mid])low=mid+1;elsehigh=mid-1;}for(j=i-1;j>=low;j--) //待排元素与插入位置之间的元素向后移动一位a[j+1]=a[j];a[low]=tmp; //插入}}int main(){int i,a[]={2,5,6,3,45,34,35,25};sort(a,8);for(i=0;i<8;i++)cout<<a[i]<<" ";}
希尔排序(不稳定)
#include<iostream>using namespace std;void shellsort(int a[],int n) //分组跳跃式比较排序{int d=n/2,i,j,t;while(d>=1){ for(i=d;i<n;i++) //一次分组间的跳跃式比较排序 { t=a[i]; j=i-d; while(j>=0&&a[j]>t) { a[j+d]=a[j]; j=j-d;}a[j+d]=t; } d=d/2; //缩小分组的长度}}int main(){int i,a[10]={2,4,8,3,13,9,23,29,88,7};shellsort(a,10);for(i=0;i<10;i++)cout<<a[i]<<" ";return 0;}
阅读全文
0 0
- 插入排序-【插入排序】
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 欢迎使用CSDN-markdown编辑器
- 点乘和叉乘
- (EX)CRT+(EX)Lucas BZOJ2142
- SSH与SSM学习之Spring19——Spring事务之事务基础
- 检索模型评价指标
- 插入排序
- eclipse快捷键冲突
- 2017.11.1总结
- #49 图形输出3 心得体会
- C++——【USACO 5.4.3】——Telecowmunication
- 方程求解
- N皇后算法—优化版
- include静态包含和动态包含
- C/C++学习之C提高-----非空格的字符串长度、去掉字符串前后空格、字符串反转、键值对字符串、const练习、二级指针做输入/输出的特性、将字符串按逗号分开,并放入二维数组打印出来