插入排序
来源:互联网 发布:oracle sql declare 编辑:程序博客网 时间:2024/05/01 08:49
插入排序:
对于数据空间减小的数据,采用直接插入排序。直接上代码。(编程环境 kali+sublime+gcc , 程序使用指针和数组两种方式(差别不大),和i和j之间微小的关系)
时间复杂度O(n^2),空间复杂度O(1)。
#include <iostream>#include <stdlib.h>using namespace std;void insertsort(int *a,int n){int temp;for(int i=1;i<n;i++){temp=*(a+i);int j=i-1;while(j>=0&&*(a+j)>temp){*(a+j+1)=*(a+j);j--;}*(a+j+1)=temp;}}void insertsort2(int *a,int n){int temp;for(int i=1;i<n;i++){temp=a[i];int j=i;while(j>0&&a[j-1]>temp){a[j]=a[j-1];j--;}a[j]=temp;}}int insertloc(int *a,int low,int high,int value){if(low==high){if(value>*(a+low))return (low+1);elsereturn low;}int mid = (low + high)/2;if(value>*(a+mid)&&value>*(a+mid+1))insertloc(a,mid+1,high,value);else if(value<*(a+mid)&&value<*(a+mid+1))insertloc(a,low,mid,value);elsereturn (mid+1);}void insertsortf(int *a,int n){int temp;int loc;for(int i=1;i<n;++i){temp = *(a+i);int j=i-1;loc = insertloc(a,0,j,temp);cout<<"insert_location"<<loc<<endl;while(j>=loc){*(a+j+1)=*(a+j);j--;}*(a+loc)=temp;for(int m = 0;m <= i;++m) cout<<*(a + m)<<" "; cout<<endl; }}int main(int argc,char *argv[]){int *arr;int num;cout<<"please input the sum of arr"<<endl;cin>>num;arr = (int *)malloc(num*sizeof(int));cout<<"please input the array!\n";for(int i=0;i<num;i++){cin>>*(arr+i);}cout<<"\n";for(int j=0;j<num;j++){cout<<*(arr+j)<<"\t";}cout<<"\n";//insertsort(arr,num);//insertsort2(arr,num);insertsortf(arr,num);for(int j=0;j<num;j++){cout<<*(arr+j)<<"\t";}cout<<"\n";free(arr);return 0;}
运行截图:
二分法运行截图:
0 0
- 插入排序-【插入排序】
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- SQL 各Join的结果区别
- 关卡原型制作思路
- emacs命令小结
- mac 控制台常用命令
- c语言-2.C语言的数据与运算
- 插入排序
- c语言实现通用数据结构(四):通用集合(HashSet)
- (void**)&
- ip配置好去上不了网?
- 微信公众号导航网站或将塑造流量入口
- _RecordsetPtr使用方法
- 【PyQt4实例9】橡皮筋线
- CentOS下新装VirtualBox虚拟系统
- VS2010 C++环境下DLL和LIB文件目录及名称修改