折半插入排序(内部排序 插入排序)

/*
算法思想:先折半查找出元素的待插入的位置,然后统一的移动待插入位置后面的元素
肖煜 
*/
#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