这是算法实验的一个小实验,自己实现了一遍,代码如下:
//main.cpp
#include <stdio.h>
#include <stdlib.h>
#include "create_binary_tree.h"
#include "hander_define.h"
#include "partition.h"
#include "quicksort.h"
int main()
{
Tree* t[max];
// t=(_B_T *)malloc(sizeof(_B_T));
Item data[]={3,5,6,4,1,2,10,9,11,8,7,12,'/0'};
quicksort(data,0,11);
init(t,data);
create_binary_tree(t,0,11);
printf_tree(t,11);
// all_traval(t[0],t[0]);
return 0;
}
//create_binary_tree.h
//create_binary_tree.h
#define max 100
typedef int Item;
typedef struct _B_T{
_B_T *left;
_B_T *right;
Item d;
}Tree;
void printf_tree(Tree* t[max],int length)
{
int i=0;
while(i<length){//init binary tree
printf("ptrinfsa=%d l=%d r=%d/n",t[i]->d,t[i]->left->d,t[i]->right->d);
i++;
}
}
void init(Tree* t[max],Item *data)
{
int i=0;
while(data[i]!='/0'){
t[i]=(_B_T *)malloc(sizeof(_B_T));
t[i]->d=data[i];
t[i]->left=NULL;
t[i]->right=NULL;
i++;
}
}
Tree* create_binary_tree(Tree* t[max],int row,int high)
{
int middle=(row+high)/2;
if(high<=row) return t[row];
if(t[middle]->left==NULL||t[middle]->right==NULL){
t[middle]->left=create_binary_tree(t,row,middle);
t[middle]->right=create_binary_tree(t,middle+1,high);
}
else{
if(t[middle]->left!=NULL&&t[middle]->right!=NULL&&t[middle]->left->d==t[middle]->d){
t[middle]->left=create_binary_tree(t,row,middle);
t[middle]->right=create_binary_tree(t,middle+1,high);
t[middle]->left=NULL;
}
else{
t[middle]->left=create_binary_tree(t,row,middle);
t[middle]->right=create_binary_tree(t,middle+1,high);
}
}
}
void all_traval(Tree* t,Tree* tt)
{
if(t->right==NULL||t->left==NULL)return;
printf("to left->%d/n",t->d);
all_traval(t,t->left);
printf("to right->%d/n",t->d);
all_traval(t,t->right);
return ;
}
//quicksort.h
void quicksort(Item *a,int low,int high)
{
int i;
if(high<=low) return;
i=partition(a,low,high);
quicksort(a,low,i-1);
quicksort(a,i+1,high);
}
//partition.h
int partition(Item *a,int low,int high)
{
int i,j;
i=low;
j=high-1;
while(i<j){
while(a[i]<a[high])i++;
while(a[j]>a[high])j--;
if(i>=j)break;
exch(&a[i],&a[j]);
}
exch(&a[high],&a[i]);
return i;
}