插入排序 (算法导论笔记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 }

浙公网安备 33010602011771号