我思 故我在

插入排序 (算法导论笔记1)

  前几日参加了百度的实习生笔试,80%的题竟然都是考算法的题,而大一简单看过的东西早就忘干净了。。。痛定思痛,决定细致地读一遍《算法导论》。

 知道书很厚很长,就把它当成业余的兴趣爱好吧。

 今天简单地看了一下第二章的插入排序,一个非常基础的排序算法,复杂度是二次的,当是练手。

 思路很简单,就是讲待排序的数组分成两部分,左边是已经排好序的,然后将右面的元素依次往左面插入,双层循环比较。

 1 /*
 2 2012年5月15日编写
 3 author:norhestknight
 4 content:插入排序
 5 */
 6 #include <iostream>
 7 #define n 10
 8 using namespace std;
 9 
10 //插入排序算法
11 void InsertionSort(int a[n])
12 {
13     //从第二个元素开始,向数组“左边”已排好序的部分有序地插入数据
14     for(int i=1;i<n;i++)
15     {
16         int key=a[i];//比较关键字
17         int j=i-1;//获取左面数组的边界
18 
19         //关键一步,将待插元素一一与左面的元素比较,
20         //若小于左边元素,则将左边元素右移
21         //指针左移继续比较
22         while(j>=0 && a[j]>key)
23         {
24             a[j+1]=a[j];
25             j=j-1;
26         }
27 
28         //否则,将值插入,大功告成
29         a[j+1]=key;
30     }
31 }
32 
33 int main()
34 {
35     //定义一个数组用于排序
36     int a[n];
37 
38     //输入数据 这里是2,5,4,6,7,1,3,9,10,8
39     for(int i=0;i<n;i++)
40     {
41         cin>>a[i];
42     }
43 
44     //进行排序
45     InsertionSort(a);
46 
47     //输出结果
48     for(int j=0;j<n;j++)
49     {
50         cout<<a[j]<<" ";
51     }
52     return 0;
53 }

 

posted @ 2012-05-15 20:22  northestknight  阅读(264)  评论(0)    收藏  举报