码迷,mamicode.com
首页 > 编程语言 > 详细

插入排序

时间:2015-07-26 09:43:58      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

基本思想

技术分享

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

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

 

插入排序

标签:

原文地址:http://www.cnblogs.com/runnyu/p/4677107.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!