• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Meng.NET
技术改变人生,网络改变生活,信息改变世界.
博客园    首页    新随笔    联系   管理    订阅  订阅
C/C++ -- 插入排序算法

索引:

目录索引

参看代码 GitHub:

Sort.cpp

代码简要分析说明:

  1.for(int i=1;i<nSize;i++)

    这个外层的for循环, [0][1],[1][2],[2][3]... 这样的顺序让内层循坏开始索引递减比较,保证每对开头

    的内层循坏排序前,前面的都是排序好的

  2.while (tmp<ary[n])  ... n-- ...

     这个内层的while循环,使外层的每对开头的循环开始,若比较后大小为真,则换位, n-- 保证了 第 n+1 位也就是 i 索引对应

     的值始终可以排到正确的位置

  3.运行环境

     Visual C++ 2008 IDE 环境, 建议实际跑一下并调试一下,结果如下:

   

  4.代码:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 // 定义函数 -- 插入排序算法
 6 void Sort(int* ary,int nSize)
 7 {
 8     /*
 9     * 循环元素,动态理解:
10     * arr[1] 与 arr[0] 比较
11     * arr[2] 与 arr[1],arr[0] 比较
12     * arr[3] 与 arr[2],arr[1],arr[0] 比较
13     * 等等 依次类推
14     */
15     for(int i=1;i<nSize;i++)
16     {
17         int tmp=ary[i];
18         int n=i-1;
19 
20         // 若后位元素小于前位元素则交换位置
21         while (tmp<ary[n])
22         {
23             ary[n+1]=ary[n];
24 
25             // 元素为动态递减
26             n--;
27 
28             // 到第一位元素后,无前位元素,跳出
29             if(n==-1)
30             {
31                 break;
32             }
33         }
34 
35         ary[n+1]=tmp;
36     }
37 }
38 
39 int main(int argc, char* argv[])
40 {
41     // 需要排序的数组
42     int numArray[]={12,31,5,87,1,56};
43     int nLength=sizeof(numArray)/sizeof(int);
44 
45     // 排序
46     Sort(numArray,nLength);
47 
48     // 显示排序后的结果
49     for(int k=0;k<nLength;k++)
50     {
51         cout<<numArray[k]<<",";
52     }
53     cout<<endl;
54 
55     // 退出
56     return 0;
57 }

 

 

 

 

 

                                         蒙

                                    2018-06-12 21:50 周二

 

posted on 2018-06-12 21:52  Meng.NET  阅读(457)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3