插入排序

基本思想

可以把插入排序看成是摸牌。把数组分成三个部分:

1.A[1...j-1]代表手中的牌(已经排序好了);

2.下标j指出当前正被插入手中的牌

3.A[j+1...n]代表仍在桌子上的牌堆

算法开始的时候手上只有一张牌,然后每次从牌堆中拿出一张牌插入到手中的正确位置,直到牌堆的牌为空。

每次插入时候的算法:

因为每次插入之前我们都保证手上的牌已经排序好了,我们只要从右面开始(j-1)找到第一个比A[j]小的牌(或者没有找到就应该插到第一位),就可以找到A[j]应该插入的位置。

 

 

 

伪代码

INSERTION-SORT(A)
for j=2 to A.length
    key=A[j]
    //Insert A[j] into sorted sequence A[1...j-1]  将A[j]插入到已排序好的队列 A[1...j-1]中 
    i=j-1
    while i>0 and A[i]>key
        A[i+1]=A[i]
        i=i-1
    A[i+1]=key

 

 

 

实现跟测试代码

 

 1 #include <iostream>
 2 using namespace std;
 3 
 4 void insertion_sort(int arr[],int length)
 5 {
 6     for(int j=2;j<=length;++j)
 7     {
 8         int key=arr[j];
 9         int i=j-1;
10         while(i>0&&arr[i]>key)   //找到比key大的数就向后移一位 
11         {
12             arr[i+1]=arr[i];
13             i=i-1;
14         }
15         arr[i+1]=key; 
16     }    
17 }
18 
19 int main()
20 {
21     int arr[]={0,5,2,4,6,1,3};
22     insertion_sort(arr,6);
23     for(int i=1;i<=6;++i)
24         cout<<arr[i]<<' ';
25     cout<<endl;
26     system("pause");
27 }
View Code

 

posted @ 2015-07-26 08:55  Runnyu  阅读(206)  评论(0)    收藏  举报