c++数据结构排序

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef int ElemType;
typedef struct{
    ElemType *elem;
    int TableLen;
}SSTable;

void ST_Init(SSTable &ST,int len)
{
    ST.TableLen=len+1;
    ST.elem=(ElemType *)malloc(sizeof(ElemType)*ST.TableLen);
    int i;
    srand(time(NULL));
    for(i=0;i<ST.TableLen;i++)
    {
        ST.elem[i]=rand()%100;
    }     
}
void ST_print(SSTable ST)
{
    for(int i=0;i<ST.TableLen;i++)
    {
        printf("%3d",ST.elem[i]);
     } 
}
//插入排序
/*void InsertSort(ElemType A[],int n)
{
    int i ,j;
    for(i=2;i<=n;i++)
    {
        if(A[i]<A[i-1])
        {
            A[0]=A[i];
            for(j=i-1;A[0]<A[j];--j)
                A[j+1]=A[j];
            A[j+1]=A[0];
        }
    }
 } */
//折半查找 
/*void MidInertSort(ElemType A[],int n)
{
    int i,j,low,high,mid;
    for(i=2;i<=n;i++)
    {
        A[0]=A[i];
        low=1;
        high=i-1;
        while(low<=high)//先通过二分查找找到待插入法人位置
        {
             mid=(low+high)/2;
            if(A[mid]>A[0])
                high=mid-1;
            else
                low=mid+1; 
    }
    for(j=i-1;j>=high+1;--j)
        A[j+1]=A[j];
    A[high+1]=A[0]; 
}
}*/
//希尔排序
void ShellSort(ElemType A[],int n)
{
    int dk,i,j;
    for(dk=n/2;dk>=1;dk=dk/2)//步长变化
    {
        for(i=dk+1;i<n;++i)//以dk为步长进行插入排序 
        {
            if(A[i]<A[i-dk])
            {
                A[0]=A[i];
                for(j=i-dk;j>0&&A[0]<A[j];j-=dk)
                    A[j+dk]=A[j];
                A[j+dk]=A[0];
            }
         } 
    } 
 } 
int main()
{
    SSTable ST;
    ST_Init(ST,10);
    ST_print(ST);
   // InsertSort(ST.elem,10);
    //MidInertSort(ST.elem,10);
    ShellSort(ST.elem,10);
    ST_print(ST);
    system("pause") ;
}

猜你喜欢

转载自www.cnblogs.com/chuxinbubian/p/10325618.html