• 随手小代码——插入排序


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

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

    请通过右侧公告中的“联系邮箱(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 }

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

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

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

  • 相关阅读:
    调用Android自带日历功能
    android使用全局变量传递数据
    安卓高手之路之java层Binder
    无刷新实时获得数据
    Android画图之抗锯齿
    android 定时器的实现
    将apk文件添加到Android模拟器(AVD)中运行
    Android 屏幕自适应方向尺寸
    经常用得到的安卓数据库基类
    android系统特效详解和修改方法
  • 原文地址:https://www.cnblogs.com/wlsandwho/p/4683038.html
Copyright © 2020-2023  润新知