读书笔记之shell排序

环境:

[lanux@localhost--Debug--15:29]$uname -sr
Linux 2.6.34.7-61.fc13.i686.PAE
[lanux@localhost--Debug--15:32]$rpm -qa|grep anjuta
anjuta-doc-2.30.2.1-1.fc13.noarch
anjuta-2.30.2.1-1.fc13.i686
anjuta-devel-2.30.2.1-1.fc13.i686
[lanux@localhost--Debug--15:33]$

 

 

此shell排序对增量序列作简单化假设,假设为{0,1,5,19,41}。

 

C代码:


一趟shell排序:

<textarea cols="50" rows="15" name="code" class="cpp">//一趟shell排序 int oneSortShell( int *SqList, int delt, int len) { if( delt&lt;0 || len&lt;0 || (SqList==NULL) ) return(0); for( int i=1; i&lt;(delt+1); i++) { /*子序列中插入排序*/ for( int j=(i+delt); j&lt;(len+1); j=j+delt ) { int k=0; /*将j插入前面已排好序列*/ SqList[0]=SqList[j]; for( k=j-delt; (k&gt;0) &amp;&amp; (SqList[0]&lt;SqList[k]) ; k=k-delt ) { /*如果SqList[0]和SqList[k]相等就不移动,维持其稳定性*/ SqList[k+delt]=SqList[k]; }//for 一趟插入排序 SqList[k+delt]=SqList[0]; }//for }//各子序列插入排序 return(1); }</textarea>

 

增量序列假设:

<textarea cols="50" rows="15" name="code" class="cpp">//全局变量shell排序增量序列,假设如下: int incrementSeq[4+1]={0,1,5,19,41};//作示范性假设</textarea>

 

shell排序:

<textarea cols="50" rows="15" name="code" class="c-sharp">/*对无序表希尔排序,区间为【1,len】,无序表长度为len+1*/ /*SqList: 无序表 incrTable: 增量序列,一般为{1,5,19,41,109...} tlen: 增量序列长度,这里区间也是【1,tlen】 len: 无序表长度,区间【1,len】 为非递减排序,已考虑保持稳定性*/ int ShellSort( int *SqList, int *incrTable, int tlen, int len) { if( tlen&lt;0 || len&lt;0 || (SqList==NULL) || (incrTable==NULL)) return(0); for( int j=tlen; j&gt;0; j-- ) { oneSortShell(SqList,incrTable[j],len); } return(1); }</textarea>

 

结果示例:

[lanux@localhost--Debug--15:33]$./shellsort
array number fallow as:
   841    372    566    967    201    692    967     94    192    486
   784    308     96    922    452     43    433    429    519    856
   962    780    830    910    316    265    932    547    194    491
The shell sort follow:
    43     94     96    192    194    201    265    308    316    372
   429    433    452    486    491    519    547    566    692    780
   784    830    841    856    910    922    932    962    967    967
[lanux@localhost--Debug--15:46]$

 

2010-12-03  15:47:00

 

你可能感兴趣的:(c,shell,null,读书,2010)