用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

对N个数进行二分插入排序

2018-01-24 作者:芙蓉妹妹举报

[c++]代码库

#include<bits/stdc++.h>
using namespace std;
void InsertionSortDichotomy(int A[], int n)
{
    //二分插入排序(类似于抓牌):从后面无序数组中取第一张牌,放到前面已经拍好的顺序中
    for (int i = 1; i < n; i++)
    {
        int get = A[i];//抓新牌
        //找新牌应该放入的位置,此处采取了二分查找法
        int left = 0;
        int right = i - 1;
        while (left <= right)
        {
            int mid = (left + right) / 2;
            if (A[mid] > get)
                right = mid - 1;
            else
                left = mid + 1;
        }
        //找到新拍的位置,后面的牌依次后挪
        for (int j = i - 1; j >= left; j--)
            A[j + 1] = A[j];
        //空出来的位置把新牌放进去
        A[left] = get;
    }
}

int main()
{
    int N, i;
    cin>>N;//对N个数进行二分插入排序
    int A[N];
    for(i = 0; i < N; i++)
        cin>>A[i];
    InsertionSortDichotomy(A, N);
    cout<<A[0];
    for (i = 1; i < N; i++)
        cout<<" "<<A[i];
    return 0;
}


分享到:
更多

网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。