1.快速排序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int one_sort(int arr[],int low,int high)
{
int key=arr[low];//确定基准值
while(low<high)//比较的过程是多次的,直到low==high循环结束
{
while(low<high&&key<=arr[high])//low<high防止high一直减下去越界
{
high--;//因为基准值在左边,先在右边比较大小
}
arr[low]=arr[high];
while(low<high&&key>=arr[low])//切换方向变成左边
{
low++;
}
arr[high]=arr[low];//把左边大于基准值的元素存到右边
}
arr[low]=key;//循环结束就说明high==low,把基准值存在low的位置上
return low;
}
void quick_sort(int arr[],int low,int high)
{
if(low<high)
{
int mid=one_sort(arr,low,high);
//递归左边,最小下标不变,最大下标为mid-1
quick_sort(arr,low,mid-1);
//递归右边,最大下标不变,最小下标变为mid+1
quick_sort(arr,mid+1,high);
}
}
int main(int argc,const char *argv[])
{
int arr[]={2,1,65,78,435,89,67,9,3};
int len=sizeof(arr)/sizeof(arr[0]);
quick_sort(arr,0,len-1);
return 0;
}
二,树
树的创建 树的深度 先序中序后序遍历
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node
{
char data;
struct Node *lchild;
struct Node *rchild;
}*btree;
btree create()
{
char e;
puts("请输入你想插入的数据:");
scanf("%c",&e);
getchar();//吸收垃圾字符
if(e=='#')
return NULL;
btree T=(btree)malloc(sizeof(struct Node));
if(T==NULL)
{
return NULL;
}
T->data=e;
T->lchild=create();
T->rchild=create();
return T;
}
void first(btree T)
{
if(T==NULL)
return;
printf("%c\t",T->data);
first(T->lchild);
first(T->rchild);
}
void mid(btree T)
{
if(T==NULL)
return;
first(T->lchild);
printf("%c\t",T->data);
first(T->rchild);
}
void last(btree T)
{
if(T==NULL)
return;
first(T->lchild);
first(T->rchild);
printf("%c\t",T->data);
}
int high(btree T)
{
if(T==NULL)
return 0;
int left=high(T->lchild)+1;
int right=high(T->rchild)+1;
return left>right?left:right;
}
btree free_space(btree T)
{
if(T==NULL)
return NULL;
free_space(T->lchild);
free_space(T->rchild);
free(T);
T=NULL;
return NULL;
}
int main(int argc,const char *argv[])
{
btree T=create();
puts("先序遍历:");
first(T);
puts("");
puts("中序遍历:");
mid(T);
puts("\n后序遍历:");
last(T);
puts("");
int hi=high(T);
printf("树的深度:%d\n",hi);
return 0;
}