随手小代码——插入排序

=================================版权声明=================================

版权声明:本文为博主原创文章 未经许可不得转载 

请通过右侧公告中的“联系邮箱([email protected])”联系我

未经作者授权勿用于学术性引用。

未经作者授权勿用于商业出版、商业印刷、商业引用以及其他商业用途。                   

 

本文不定期修正完善,为保证内容正确,建议移步原文处阅读。                                                               <--------总有一天我要自己做一个模板干掉这只土豆

本文链接:http://www.cnblogs.com/wlsandwho/p/4683038.html

耻辱墙:http://www.cnblogs.com/wlsandwho/p/4206472.html

=======================================================================

 直接上代码,没啥好说的。

 1 #include <iostream>
 2  3 using namespace std;  4  5  6 void InsertionSortByWLS(int nArray[],int nLen)  7 {  8 int nTemp=0;  9 10 for (int nIndex=1;nIndex<nLen;nIndex++) 11  { 12 nTemp=nArray[nIndex]; 13 14 int nCmpIndex; 15 for (nCmpIndex=nIndex;nCmpIndex>0;nCmpIndex--) 16  { 17 if (nArray[nCmpIndex-1]>nTemp) 18  { 19 nArray[nCmpIndex]=nArray[nCmpIndex-1]; 20 nArray[nCmpIndex-1]=nTemp; 21  } 22 else 23  { 24 break; 25  } 26  } 27  } 28 } 29 30 int _tmain(int argc, _TCHAR* argv[]) 31 { 32 int nTestArray2[13]={99,35,50,10,101,5,66,100,6,88,22,111,33}; 33 InsertionSortByWLS(nTestArray2,13); 34 for (int i=0;i<13;i++) 35  { 36 cout<<nTestArray2[i]<<" "; 37  } 38 cout<<endl; 39 40 return 0; 41 }

因为

比较后写回nTemp继续比较再写回nTemp,这个过程如果重复多次,实际上除了最后一次的nTemp是有效的,其他都是在做无效赋值——下次又被覆盖了

所以修改如下

 1 #include <iostream>
 2  3 using namespace std;  4  5  6 void InsertionSortByWLS(int nArray[],int nLen)  7 {  8 int nTemp=0;  9 10 for (int nIndex=1;nIndex<nLen;nIndex++) 11  { 12 nTemp=nArray[nIndex]; 13 14 int nCmpIndex; 15 for (nCmpIndex=nIndex;nCmpIndex>0;nCmpIndex--) 16  { 17 if (nArray[nCmpIndex-1]>nTemp) 18  { 19 nArray[nCmpIndex]=nArray[nCmpIndex-1]; 20  } 21 else 22  { 23 break; 24  } 25  } 26 27 nArray[nCmpIndex]=nTemp; 28  } 29 } 30 31 int _tmain(int argc, _TCHAR* argv[]) 32 { 33 int nTestArray2[13]={99,35,50,10,101,5,66,100,6,88,22,111,33}; 34 InsertionSortByWLS(nTestArray2,13); 35 for (int i=0;i<13;i++) 36  { 37 cout<<nTestArray2[i]<<" "; 38  } 39 cout<<endl; 40 41 return 0; 42 }

考虑到 for循环里也是可以有判断的,所以修改下

 1 #include <iostream>
 2  3 using namespace std;  4  5  6 void InsertionSortByWLS(int nArray[],int nLen)  7 {  8 int nTemp=0;  9 10 for (int nIndex=1;nIndex<nLen;nIndex++) 11  { 12 nTemp=nArray[nIndex]; 13 14 int nCmpIndex; 15 for (nCmpIndex=nIndex;nCmpIndex>0 && nArray[nCmpIndex-1]>nTemp;nCmpIndex--) 16  { 17 nArray[nCmpIndex]=nArray[nCmpIndex-1]; 18  } 19 20 if (nCmpIndex<nIndex) 21  { 22 nArray[nCmpIndex]=nTemp; 23  } 24  } 25 } 26 27 28 int _tmain(int argc, _TCHAR* argv[]) 29 { 30 int nTestArray2[13]={99,35,50,10,101,5,66,100,6,88,22,111,33}; 31 InsertionSortByWLS(nTestArray2,13); 32 for (int i=0;i<13;i++) 33  { 34 cout<<nTestArray2[i]<<" "; 35  } 36 cout<<endl; 37 38 return 0; 39 }

=======================================================================

生命在于运动,说的就是要经常动手写代码。

=======================================================================

 

你可能感兴趣的:(随手小代码——插入排序)