Chinaunix首页 | 论坛 | 博客
  • 博客访问: 140943
  • 博文数量: 56
  • 博客积分: 245
  • 博客等级: 二等列兵
  • 技术积分: 520
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-08 14:43
个人简介

慢慢来

文章分类

全部博文(56)

文章存档

2017年(5)

2016年(2)

2015年(6)

2014年(28)

2013年(5)

2012年(10)

我的朋友

分类: C/C++

2014-07-31 16:27:03

**转载请注明**

    一个开头总要说些开场白,‘闲来无事’之类的,好吧,最近因为在了解数据库索引机制,无意发现了‘红黑树’,看了半天发现算法机制已经忘得差不多了,重补《算法导论》,随手记一些代码,希望有机会的时候拿出来能够再快速补脑~

    不知道该算是‘翻译’还是‘原创’,总之顺序和插图都是来自于《Introduction of Algorithms》(3rd),算是笔记吧。

Getting Started:

插入排序(Insertion Sorp)
    原理:

    * 循环从2~6, 黑色数字依次跟前一个比,如果比前一位小就移位,直到最终结束或者遇到更小的。
    * 说白了就是抓牌,每抓一张插进去,大的都往后移

C++ 代码:
    

点击(此处)折叠或打开

  1. [myang@mnsdev13:~/dev/cpp]$ cat insertion_sort.cpp
  2. #include <iostream>

  3. using namespace std;

  4. void INSERTION_SORT( int*, int );

  5. int main(){
  6.     int a[] = {5,2,4,6,1,3};

  7.     INSERTION_SORT(a, sizeof(a)/sizeof(int));

  8.     for (int i = 0; i < sizeof(a)/sizeof(int); i++){
  9.         cout << a[i] << endl;
  10.     }
  11.     return 0;
  12. }

  13. void INSERTION_SORT( int* array, int len ){
  14.     // 从第二个到最后
  15.     for (int j = 1; j < len; j++){
  16.         int i = j - 1;   // i 是黑色前一个数
  17.         int k = array[j]; // 把黑色先存下来

  18.         while ( i >= 0 && array[i] > k ){ //如果还有数字,而且还大于此轮比较的数字
  19.             array[i+1] = array[i];
  20.             i--; // 看来k不能放在这 还得比
  21.         }
  22.         array[i+1] = k; // 比完了,比i大或者i是-1了。存在i后边或者0位置
  23.     }
  24. }

运行结果:
    

空间复杂度:
    O(1)

时间复杂度:
    O(n^2)





阅读(278) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~