插入排序整理

插入排序的思路:从第2个数开始,依次循环把后一个数插入到前面已排序序列中。

上代码:


//1.无哨兵版
void InsertSort1(int[] arr,int nLength)
{
    //检测数组
    if(arr == null || nLength <=0) return;
    
    int i;
    int j;
    int temp;
 
    for(i = 1;i<nLength;i++)
    {
        //判断是否需要插入
        if (arr[i-1] <= arr[i]) continue; 
        
        j = i-1; //有序的最后一个
        temp = arr[i]; //待排序元素        
 
        //查找待排序元素的插入位置        
    while (j >= 0 && arr[j] > temp)
        {
            arr[j+1] = arr[j];//后移原有序元素,空出插入位置
            j--;//确定插入位置
        }
        //插入待排序元素
    arr[j + 1] = temp;
    }
}


//2.有哨兵版
void InsertSort2(int[] arr, int nLength)
{        
    if(arr == null || nLength <=0)return;
    
    int i;
    int j;
    int temp=arr[0];
    
    for(i = 2;i<nLength;i++)
    {
     if (arr[i-1] <= arr[i]) continue; 
    
     j = i-1; //有序的最后一个
     
     //仅与哨兵比较,防止越界
     while(arr[j] > arr[0])
     {
       arr[j+1] = arr[j];
       j--;
     }
     //插入待排序元素
     arr[j+1] = arr[0];
    }
    
    //最后插入原来的哨兵元素    
    j = 1;     
    //查找待排序元素的插入位置
    //并依次前移原有序元素
    while(j < nLength && arr[j] < temp )
    {        
     arr[j-1] = arr[j];
     j++;
    }
    //插入待排序元素
    arr[j-1] = temp;
}

插入排序的一般步骤:
1.判断是否需要插入
2.设置哨兵
3.后移元素,同时确定插入位置
4.插入元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值