=================================版权声明=================================
版权声明:本文为博主原创文章 未经许可不得转载
请通过右侧公告中的“联系邮箱(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 }
=======================================================================
生命在于运动,说的就是要经常动手写代码。
=======================================================================