#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) 回复
??
回复评论