插入排序

来源:互联网 发布:js判断偶数 编辑:程序博客网 时间:2024/06/03 20:28
基本思想

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

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


 

 

实现跟测试代码

#include <iostream>using namespace std;void insertion_sort(int arr[],int length){    for(int j=2;j<=length;++j)    {        int key=arr[j];        int i=j-1;        while(i>0&&arr[i]>key)   //找到比key大的数就向后移一位         {            arr[i+1]=arr[i];            i=i-1;        }        arr[i+1]=key;     }    }int main(){    int arr[]={0,5,2,4,6,1,3};    insertion_sort(arr,6);    for(int i=1;i<=6;++i)        cout<<arr[i]<<' ';    cout<<endl;    system("pause");}

 

0 0