那些年,那些值得珍藏的算法
来源:互联网 发布:数据可视化参考手册 编辑:程序博客网 时间:2024/04/29 05:21
之前看过一些算法,都不是太留意,如今有时间,倒是想将之整理一二,如果错误之处,欢迎指正
Int16位整数字节交换,简单移位运算后或运算
static inline uint16_t bswap_16(uint16_t x)
{
return (x >> 8) | (x << 8);
}
int32位长整型字节交换
static inline uint32_5 bswap_32(uint32_t x)
{
x = ((x << 8) &0xFF00FF00) | ((x>>8)&0x00FF00FF);
return (x >> 16) | (x << 16);
}
知道结构体中某字段位置,偏移到结构体首部
#define CONTAINING_RECORD(address,type,field) ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field))))
外部模块导入函数定义的宏
#define DECL_FUNCINTRO(call,ret,name,args) \
typedef ret (call *name ## _func) args;\
ret call new_ ## name args;\
extern name ## _func orig_ ## name;\
extern name ## _func load_ ## name;
#define LIBRARY_LOADFUNC(dll,func) \
{ \
HMODULE hDll = LoadLibrary(dll);\
if(hDll) { \
load_ ## name = (name ## _func)GetProcessAddress(hDll,# name);\
} \
}
冒泡排序算法简述
void bubble_sort(int a[],int n)
{
for(int i = 0;i<n-1;i++)
{
for(int j = 0;j<n-1-i;j++)
{
if(a[j] > a[j+1])
{
int temp =a[j]; a[j] = a[j+1];a[j+1]=a[j];
}
}
}
}
快速排序
int partition(int *data,int low,int hign)
{
int t = 0;
t = data[low];
while(low < high)
{
while(low < high && data[high] >= t)
high --;
data[low] = data[high];
while(low < high && data[low] < t)
low++;
data[high] = data[low];
}
data[low] = t;
return low;
}
void quick_sort(int *data,int low,int high)
{
if(low <= high) return;
int pivotloc = 0;
pivotloc = partition(data,low,high);
quick_sort(data,low,pivotloc-1);
quick_sort(data,pivotloc-1,high);
}
或者直接写出函数实现
void quick_sort(int s[],int l,int r)
{
if(l< r)
{
int i = l,j= r,x=s[l];
while(i < j)
{
while(i<j && s[j] >= x)
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i] < x)
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quick_sort(s,l,i - 1);
quick_sort(s,i+ 1,r);
}
}
选择排序
static void selection_sort(int a[],int n)
{
for(int i = 0;i<n;i++)
{
int min = a[i],min_index = i;
for(int j = i;j<n;j++)
{
if(a[j] < min)
{
min = a[j];
min_index = j;
}
}
if(min_index != i)
{
int temp = a[i];
a[i] = a[min_index];
a[min_index] = temp;
}
}
}
堆排序
void heap_sort(int a[],int i)
{
int j ,temp;
temp = a[i];
j = (i - 1) /2;
while(j >= 0 && i != 0)
{
if (a[j] <= temp) break;
a[i] = a[j];
i = j;
j = (i - 1)/2;
}
a[i] = temp;
}
- 那些年,那些值得珍藏的算法
- 程序员不得不珍藏的那些励志片段
- 程序员不得不珍藏的那些励志片段
- 程序员不得不珍藏的那些励志片段
- 程序员不得不珍藏的那些励志片段
- 程序员不得不珍藏的那些励志片段
- 程序员不得不珍藏的那些励志片段
- 程序员不得不珍藏的那些励志片段
- 程序员不得不珍藏的那些励志片段
- 2011,那些值得的回忆
- 那些值得吟唱的诗词歌赋
- 值得珍藏的名言
- 那些最重要的算法
- 算法的那些事
- Block编程值得注意的那些事儿
- Block编程值得注意的那些事儿
- Block编程值得注意的那些事儿
- Block编程值得注意的那些事儿
- linux文件操作函数(open、write、read、close)
- HADOOP 开发环境的配置
- 第11周项目4-教师兼干部类 (多重继承方式)
- java学习、java教程:给各阶段Java程序猿的学习建议
- 使用JXL
- 那些年,那些值得珍藏的算法
- 深入理解计算机系统 2
- 程序员必备神器
- Android中实现倒计时的方法总结
- mysql 全文检索 百万条记录的快速检索
- 第十四周项目2——两个成员的类模板
- 最美的公式之一— —欧拉公式
- 第14周项目2:两个成员的类模板(2)
- PKU MOOC作业魔兽世界之一:备战的结构化程序