//层次遍历
void LevelOrder(BiTree T) ///////MDMDMD 这里是BiTree 不是BTNode
{
//管他啥linkedlist还是什么list,类型出现的地方很少,queue容器装入的是指针类型
queue<BiTree> queue;
queue.push(T); //算法1:根结点入队列
while(!queue.empty()){ //算法2:若队列非空则循环执行算法3到5
T = queue.front(); //算法3:对头元素出队,指针从新指向,front()方法是将返回队头元素
printf("%c",T->data);//队头元素出队然后将队头元素的左右孩子入队
queue.pop();//pop是出队
if(T->lchild != NULL){//算法4:左子树不空,将左子树入队
queue.push(T->lchild);//入队的就是一个地址元素
}
if(T->rchild != NULL){//算法5:右子树不空,将右子树入队
queue.push(T->rchild);
}
}
}
void quicksort(int a[],int left,int right)
{ int i=left;int j=right;int temp;
if(i>j) return;//这是一个隐藏的大bug,必须是大于符号
temp=a[i]; //算法1:将数组中最左端的那个元素当做哨兵
while(i<j) //算法2:若i<j则循环执行算法3到4
{
while(a[j]>=temp&&j>i) j--; //算法3:从后向前找一个比哨兵小的元素并放入i指向的位置
if(j>i) a[i++]=a[j];
while(a[i]<=temp&&j>i) i++;//算法4:..........
if(j>i) a[j--]=a[i];
}
a[i]=temp;//算法5:经过一趟排序,左边的比他小,右边的元素比他大
quicksort(a,left,i-1);//像二叉树的递归遍历
quicksort(a,i+1,right);//也像二分查找的递归算法
}
int main()
{
int k;//黑盒测试,测了很多遍正确
int a[]={-44,-90,81110,80,1,1,1,-99,-99,-99}; //>= <=即使没有等号也可以成立
quicksort(a,0,9);
for(k=0;k<=9;k++)
printf("%d\n",a[k]);
return 0;
}