希尔排序

来源:互联网 发布:大数据选股app 编辑:程序博客网 时间:2024/05/21 15:50

希尔排序主要是每次减少两个数之间的增量,让两个数再来进行比较。d=d/2,故包含两个函数,一个函数是将d每次减少,直到d==1,另一个函数是将增量旁边的两个数进行比较,

#include<iostream>#include<stdlib.h>using namespace std;void shellInsert(int a[],int d,int n){    for(int i=d;i<n;i++)//从第一个d的位置开始    {        int j=i-d;//j先指向i前面的位置        int temp=a[i];//将a[i]的值赋值给temp        while(j>=0 && a[j]>temp)//将a[j]从后向前找,直到找到比其小的数的位置        {            a[j+d]=a[j];//向后挪动            j=j-d;        }        if(j!=(i-d))//存在比其小的数        {            a[j+d]=temp;//将temp的数插入到a[j+d]中        }    }}void shellSort(int a[],int n){    int d=n/2;//第一次是现将n/2赋值给d    while(d>=1)//当d>=1或者d>0时,表示相邻两个元素距离    {        shellInsert(a,d,n);//插入排序        d=d/2;//每次将增量减半    }}int main(void){    int a[30];    cout<<"Please input the number of the figure:"<<endl;    int n;    cin>>n;    for(int i=0;i<n;i++)    {        cin>>a[i];    }    shellSort(a,n);    for(int j=0;j<n;j++)    {        cout<<a[j]<<' ';    }    cout<<endl;    return 0;}
1 0
原创粉丝点击