二分插入法
#include <stdio.h>
#include <string.h>
#define yes 1
#define no 0
#define size sizeof(int)/sizeof(char)
void sort(int input[], int n){
int current,pos;
int low,high,mid;
int x;
for(current=1;current<n;current++){
x = input[current];
pos = -1;
if(x < input[0])
pos = 0;
else if(x <= input[current-1]){
low = 0;
high = current-1;
while(high-low>1){
mid = (low+high)/2;
if(x >= input[mid])
low = mid;
else
high = mid;
}
pos = low + 1;
}
if(pos >= 0){
memmove((void *)&input[pos+1], (void *)&input[pos], size*(current-pos));
input[pos] = x;
}
}
}
int main(void){
int array[] = {1,6,3,7,9,20,8,4};
for(int i=0;i<sizeof(array)/sizeof(int);i++){
printf("%d",array[i]);
}
printf("\r\n");
sort(array, sizeof(array)/sizeof(int));
for(int i=0;i<sizeof(array)/sizeof(int);i++){
printf("%d",array[i]);
}
printf("\r\n");
return 0;
}