1、思维导图
https://www.zhixi.com/view/4aaa42a3
2、二叉树实现
#include "tree.h"
//创建结点
ptree create_node(datatype data)
{
ptree node = (ptree)malloc(sizeof(tnode));
if(node==NULL)
{
return NULL;
}
node->data = data;
node->right = NULL;
node->left = NULL;
return node;
}
//创建树,(根节点的左右子树仍然是一个二叉树)
ptree create_tree()
{
//给新的结点申请空间
//二叉树中结点的数据
char data = '\0';
scanf(" %c",&data); //从终端获取二叉树中结点的值
if(data=='#')
{
return NULL;
}
ptree T = create_node(data);
T->left = create_tree();
T->right = create_tree(); //根节点的左子树,仍然是一颗需要根节点的二叉树
return T;
}
//先序遍历:根左右
void pri(ptree T)
{
if(T==NULL)
{
return ;
}
printf("%c",T->data);
pri(T->left);
pri(T->right);
return ;
}
//中序遍历:左根右
void mid(ptree T)
{
if(T==NULL)
{
return ;
}
mid(T->left); //调用左子树的中序
printf("%c",T->data); //输出根节点
mid(T->right); //调用右子树的中序
}
//后序遍历(左右根)
void last(ptree T)
{
if(T==NULL)
{
return ;
}
last(T->left);
last(T->right);
printf("%c",T->data);
}
3、冒泡排序
for(i=1;i<len;i++)
{
for(j=0;j<len-i;j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
4、选择排序
for(i=1;i<len;i++)
{
min_index=i-1; //每次排序前都要给最小值的下标重新赋值
for(j=i;j<len;j++)
{
if(arr[j]<arr[min_index])
{
min_index = j; //更新最小值的下标
}
}
temp = arr[min_index];
arr[min_index] = arr[i-1]; //i-1是待排序序列中第一个元素的下标
arr[i-1] = temp;
}
5、快速排序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//一次快速排序的函数,返回值是最后基准的下标
int one_sort(int *arr,int low,int high)
{
//定义一个标准元素
int base = arr[low];
while(high>low)
{
while(arr[high]>base&&high>low) //如果high下标的元素比基准更大,继续向前寻找不符合条件的元素
{
high--;
}
arr[low]=arr[high]; //找到high位置上比base更小的元素,赋值给low位置
while(arr[low]<base&&high>low)
{
low++;
}
//找到了在low位置上比base更大的元素,赋值给high位置
arr[high]=arr[low];
}
arr[low]=base;
return low;
}
//整体快排的代码
void sort(int *p,int low,int high)
{
//当传过来的low<high说明数组是无序的
if(high>low)
{
//接收一次快排的结果,对一次快排后,基准两侧的序列再排序
int ret = one_sort(p,low,high);
sort(p,low,ret-1);
sort(p,ret+1,high);
}
}
int main(int argc, const char *argv[])
{
int arr[]={12,90,1,23,56,43,9};
int len = sizeof(arr)/sizeof(int);
sort(arr,0,len-1);
int i;
for(i=0;i<len;i++)
{
printf("%d\n",arr[i]);
}
return 0;
}