插入排序

来源:互联网 发布:类似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;}

原创粉丝点击