/*
算法思想:先折半查找出元素的待插入的位置,然后统一的移动待插入位置后面的元素
肖煜
*/
#include<stdio.h>
#include<stdbool.h>
void BinaryInsertSort(int *a, int n)
{
int i, j, k, low, high, m;
for(i = 1; i < n; i++) {
low = 0;
high = i - 1;
while(low <= high) {
m = (low + high) / 2;
if(a[m] > a[i]) high = m - 1;
else low = m + 1;
}
if(j != i - 1) {
int temp = a[i];
for(k = i - 1; k >= high + 1; k--)
a[k + 1] = a[k];
a[k + 1] = temp;
}
}
}
//void BinaryInsertSort(int A[],int n){
// int i,j,low,high,mid;
// for(i=2;i<n;i++){
// A[0] = A[i];
// low = 1;high = i-1;
// while(low<high){
// mid = (low+high)/2;
// if(A[mid]>A[0])
// high = mid - 1;
// else
// low = mid + 1;
//
// }
// for(j=i-1;j>=high+1;--j){
// A[j+1] = A[j];
// }
// A[j+1]=A[0];
// }
//}
void printArray(int *a, int n)
{
for(int i = 0; i < n; i++){
printf("%d ", a[i]);
}
printf("\n");
}
int main()
{
int a[7] = {5,2,1,8,10,23,22};
BinaryInsertSort(a, 7);
printArray(a, 7);
return 0;
}
折半插入排序(内部排序 插入排序)
猜你喜欢
转载自blog.csdn.net/weixin_37887248/article/details/81150859
今日推荐
周排行