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

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

请通过右侧公告中的“联系邮箱(wlsandwho@foxmail.com)”联系我

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

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

 

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

本文链接: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 }

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

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

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