[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;
}
by: 发表于:2018-05-28 15:23:56 顶(4) | 踩(4) 回复
??
回复评论