1,反转二叉树
BiTree ReversedBiTree(BiTree root)
{
if (root == null) {
return null;
}
root->left = ReversedTree(root->left);
root->right = ReversedTree(root->right);BiTree tmp = root->left;
root->left = root->right;
root->right = tmp;
return root;
}
2,从一个字符串中找出出现频率最高的字符
int[] x = new int[26];
char[] ca = str.toCharArray();
for(int i=0;i <ca.length;i++){
x[ca[i]-‘a’]++;
}
for(int i=0;i <ca.length;i++){
System.out.println(“字符”+(char)(‘a’+i)+”出现了”+ca[i]+”次”);
}
3,快速排序
快速排序选择基准的三种方法:
- 1,选第一个;
- 2,随机选
- 3,选择1,
n
和n/2
的平均数
四种优化方法:
- 优化1:当待排序序列的长度分割到一定大小后,使用插入排序(对于小规模部分有序的数组,快排不如插排好)
- 优化2:在一次分割结束后,可以把与Key相等的元素聚在一起,继续下次分割时,不用再对与key相等元素分割
- 优化3:优化递归操作,使用为递归进行优化
- 优化4:使用并行或多线程处理子序列
void quicksort(int arr[],int left,int right)
{
int i,j,t,temp;
if(left>=right)
return;
temp=a[left]; //temp中存的就是基准数
i=left;
j=right;
while(i!=j)
{
while(a[j]>=temp && i<j) //顺序很重要,要先从右边开始找
j–;
while(a[i]<=temp && i<j) //再找右边的
i++;
if(i<j) //交换两个数在数组中的位置
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left]=a[i]; //最终将基准数归位
a[i]=temp;
quicksort(arr,left,i-1);//继续处理左边的,这里是一个递归的过程
quicksort(arr,i+1,right);//继续处理右边的 ,这里是一个递归的过程
4,二分查找
int BinSearch(int arr[],int low,int high,int num)
{
while(low<=high)
{
int mid=(low+high)/2;
if(num==arr[mid]) return mid;
else if(num < arr[mid]) high=mid-1;
else low=mid+1;
}
return -1;
}
5,希尔排序
void shellsort2(int a[], int n)
{
int j, gap;for (gap = n / 2; gap > 0; gap /= 2)
for (j = gap; j < n; j++)//从数组第gap个元素开始
if (a[j] < a[j – gap])//每个元素与自己组内的数据进行直接插入排序
{
int temp = a[j];
int k = j – gap;
while (k >= 0 && a[k] > temp)
{
a[k + gap] = a[k];
k -= gap;
}
a[k + gap] = temp;
}
}
6,冒泡排序(在某趟冒泡排序过程中,若没有发现一个逆序对,就可以直接结束整个排序过程)
void bubble_sort(int arr[],int n)
{
int flag=1;
for(int i=0;i<n && flag;i++)
{
flag=0;
for(int j=0;j<n-i;j++)
if(a[j]>a[j+1])
{
int tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
flag=1;
}
}
}
7,选择排序
void select_sort(int arr[],int n)
{
for(int i=0;i<n;i++)
{
int k=i;
for(int j=i+1;j<n;j++)
if(a[j]<a[k])
k=j;
if(k!=i)
{
int tmp=a[i];
a[i]=a[k];
a[k]=tmp;
}
}
}
8,插入排序
void insert_sort(int arr[],int n)
{
for(int i=2;i<n;i++)
{
if(a[i]<a[i-1])
{
a[0]=a[i];
for(int j=i;a[0]<a[j];j–)
a[j+1]=a[j]; //记录后移
a[j+1]=a[0]; //插入到正确的位置
}
}
}
9,木桶排序
#include <stdio.h>
int main()
{
int a[11],i,j,t;
for(i=0;i<=10;i++)
a[i]=0; //初始化为0for(i=1;i<=5;i++) //循环读入5个数
{
scanf(“%d”,&t); //把每一个数读到变量t中
a[t]++; //进行计数
}for(i=0;i<=10;i++) //依次判断a[0]~a[10]
for(j=1;j<=a[i];j++) //出现了几次就打印几次
printf(“%d “,i);
}
10,实现一个逆转函数
#!/usr/bin/env python
# coding=utf-8
string_reversed = lambda x:x[::-1]
if __name__ == ‘__main__’:
s = ‘abcde’
print string_reversed(s)