插入排序-【Shell排序】

来源:互联网 发布:无线有限制的网络连接 编辑:程序博客网 时间:2024/05/01 06:56
//Shell排序是对插入排序的一种改进,在最坏的情况下时间复杂度为O(n2),在最好的情况下为O(n);当插入的数据基本有序的时候插入的效率时最高的;//Shell的基本思想是先将整个要排序的序列分成若干个子序列,分别对各个子序列进行直接插入排序,当各个子序列基本有序时,再对子序列进行一次插入排序;#include <stdio.h>#include <stdlib.h>#include <math.h>void shellinsert(int array[],int number,int incr);void shellsort(int array[],int number,int t);int main(){int i,count;printf("please input the number of the data:\n");scanf("%d",&count);int array[count];printf("please input the number:\n");for(i=0;i<count;i++){scanf("%d",&array[i]);}printf("before sort:\n");for(i=0;i<count;i++){printf("%d ",array[i]);}printf("\n");shellsort(array,count,3);printf("after sort:\n");for(i=0;i<count;i++)printf("%d ",array[i]);printf("\n");return 0;}void shellinsert(int array[],int number,int inc){int i,j;for(i=inc;i<number;i++){int temp=array[i];for(j=i-inc;j>=0 && temp<array[j];j-=inc){array[j+inc]=array[j];}array[j+inc]=temp;}printf("%d\n",i);}void shellsort(int array[],int number,int t){int k;//k表示第几趟排序,t表示一共排序几趟;int incr[3]={7,3,1};for(k=0;k<t;k++){// incr[k]=pow(2,t-k)-1;shellinsert(array,number,incr[k]);}}

#include <iostream>using namespace std;void shellinsert(int a[],int n,int incr);void shell(int a[],int n,int inc[],int t);int main(){     int number;    cout<<"请输入你的数组的个数:"<<endl;    cin>>number;    int a[number]; int inc[]={7,3,1};    cout<<"请输入你的数据:"<<endl;    for(int i=0;i<number;i++)    {        cin>>a[i];    }        cout<<"请确认你输入的数据:"<<endl;        for(int i=0;i<number;i++)        {            cout<<a[i]<<"   ";        }     cout<<endl;     cout<<endl;     shell(a,number,inc,3);     cout<<"排序后的顺序是:"<<endl;       for(int i=0;i<number;i++)        {            cout<<a[i]<<"   ";        }    }void shellinsert(int a[],int number, int zen){    for(int i=zen;i<number;i++)     {         int e=a[i];         int j;         for(j=i-zen;j>=0&&e<a[j];j-=zen)         {             a[j+zen]=a[j];         }             a[j+zen]=e;     }}void shell(int a[],int number,int inc[],int t){    for(int k=0;k<t;k++)    {        shellinsert(a,number,inc[k]);    }}

4 0
原创粉丝点击