插入排序学习(三) 折半排序

#include<stdio.h>
#include <strings.h>

#define MAXSIZE 20

typedef struct
{
    int arr[MAXSIZE];
    int length;
}tree;


void initTree(tree* T)
{
    bzero(T,sizeof(tree));
    T->length = 4;
    T->arr[0] = 3;
    T->arr[1] = 5;
    T->arr[2] = 8;
    T->arr[3] = 14;
}


int length = 4;

/**
  * 折半插入排序算法
  */
void insertBinarySort(int data,tree* T)
{
    //插入排序
    int mid,high,low;
    int j;
    //查找插入位置
    low = 0;
    high = T->length -1;
    while (low <= high)
    {
        mid = (low+high)/2;

        if(data < T->arr[mid])
        {
            high = mid-1;
        }else{
            low = mid + 1;
        }
    }

    //找到插入位置后进行插入并且对所有元素后移
    T->length++;
    for(j = T->length;j>=high+1;j--)
    {
        T->arr[j+1] = T->arr[j];
    }
    T->arr[high+1] = data;
}

void printTree(tree *T)
{
    int i;
    for(i=0;i<T->length;i++)
    {
        printf("%d\n",T->arr[i]);
    }
}


int main()
{
    tree dataTree;
    initTree(&dataTree);
    insertBinarySort(6,&dataTree);
    insertBinarySort(15,&dataTree);
    printTree(&dataTree);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_32783703/article/details/104252755