#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") ; }
c++数据结构排序
猜你喜欢
转载自www.cnblogs.com/chuxinbubian/p/10325618.html
今日推荐
周排行