参考直接插入排序,用二分优化了查找的时间。直接贴代码了
#include <stdio.h>
#include <iostream>
#include <string.h>
const int maxn = 1000+10;
int arr[maxn];
using namespace std;
void InsertSort(int arr[], int n)
{
int low, high, mid, temp;
for(int i=0; i<n; i++)
{
low=0;
high=i-1;
temp = arr[i];
while(low<=high)
{
mid = (low+high)/2;
if(temp<=arr[mid])
high = mid-1;
else
low = mid+1;
}
for(int k=i; k>low; k-- )
arr[k] = arr[k-1];
arr[low] = temp;
}
}
int main()
{
int n;
while(cin>>n){
memset(arr,0,sizeof(arr));
for(int i=0; i<n; i++)
cin>>arr[i];
InsertSort(arr, n);
for(int i=0;i<n;i++)
cout<<arr[i]<<" ";
cout<<endl;
}
return 0;
}
如有不对,欢迎指出