读书笔记之快速排序

环境:Microsoft Visual C++ 2005

 

看数据结构书的时候,感觉书是看懂了,于是决定自己重新敲下键盘试试,对于效率还算可以的快速排序,虽然复杂度不是很大,但亲自敲过,印象可能会比较深!在coding中,曾一直陷入死循环,一直以为死在递归调用中了,直到一直按F11下去,发现是当与枢纽元相等的值比较时死了 ,改 (SqList[0]<SqList[right]) (SqList[0]<=SqList[right]) 后就 OK了,特记下这次过程。

注:此排序对于枢纽元的选择做简单处理,直接选表中第一个元素,如果表有序则退化为冒泡排序!

 

<textarea cols="50" rows="15" name="code" class="cpp">int QuickLocate( int *SqList,int left, int right ) { if( left&gt;right ) return 0; /*这里快速排序简单的选第一个元素为枢纽元,如果表本 来有序,则退化为冒泡排序*/ SqList[0]=SqList[left];//取第一个为枢纽元,放于SqList[0] while(right&gt;left) { /*比较的时候需要考虑相等的情况,否则会进入死循环,注意了!*/ while( (right&gt;left) &amp;&amp; (SqList[0]&lt;=SqList[right]) ) { right=right-1; }/*如果枢纽元大于right,则交换letf和right所指的值;*/ SqList[left]=SqList[right]; while( (right&gt;left) &amp;&amp; (SqList[0]&gt;SqList[left]) ) { left=left+1; }/*枢纽元左边的是小于枢纽元的*/ SqList[right]=SqList[left]; }//while /*到此已经把枢纽元的位置定好了*/ SqList[left]=SqList[0]; return left; } /*对无序表快速排序,区间为【left,right】,无序表长度为len+1*/ int QuickSort( int *SqList,int left,int right ) { if( (left&gt;=right) || (NULL==SqList) ) return 0; int locate=QuickLocate(SqList,left,right); QuickSort(SqList,locate+1,right); QuickSort(SqList,left,locate-1); return 1; }</textarea>

 

附上结果如下:

读书笔记之快速排序_第1张图片

 

2010-11-28 23:54:37

你可能感兴趣的:(读书笔记之快速排序)