那些年,那些值得珍藏的算法

原创 2016年06月02日 10:11:00

之前看过一些算法,都不是太留意,如今有时间,倒是想将之整理一二,如果错误之处,欢迎指正

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;

}





白话经典算法系列之六 快速排序(Quick sort)

快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个...
  • FENGQIYUNRAN
  • FENGQIYUNRAN
  • 2013年06月05日 00:23
  • 1498

快速排序

一.排序分析 参看《算法导论》 二.代码(C++) // sort.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #inc...
  • seu2hit
  • seu2hit
  • 2013年03月31日 15:44
  • 284

排序算法总结

//几个排序 //快排 堆排序 希尔排序 归并排序 插入排序,选择排序 //快速排序 //以下所有的排序都是从小到大排序 //不稳定 时间复杂度O(nlgn)空间复杂度O(1) 最坏时间复...
  • GyafdxIs
  • GyafdxIs
  • 2017年03月13日 19:16
  • 127

八种排序方法(七)——归并排序

编译器:Xcode 编程语言:C++源程序:#include using namespace std;void merge(int a[],int low,int mid,int high) { ...
  • qq_39360985
  • qq_39360985
  • 2017年12月17日 16:50
  • 36

第十二章:高阶函数

第十二章:高阶函数标签(空格分隔): scala课后习题1 编写函数values(fun:(Int)=>Int,low:Int,high:Int),该函数输出一个集合,对应给定区间内给定函数的输入和输...
  • zl3450341
  • zl3450341
  • 2015年05月21日 16:36
  • 672

第十六周项目9归并方法改进

采用归并排序、快速排序等高效算法进行排序,当数据元素较少时(如n≤64),经常直接使用直接插入排序算法等高复杂度的算法。这样做,会带来一定的好处,例如归并排序减少分配、回收临时存储区域的频次,快速排序...
  • c17862819139
  • c17862819139
  • 2015年12月14日 17:11
  • 239

快速排序(Quicksort)

快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据...
  • liangzhaoyang1
  • liangzhaoyang1
  • 2016年03月17日 00:02
  • 315

第7章 函数--C++的编程模块

 总体来说,C++的函数部分的基础内容与C语言基本一致,没有什么新特性,这里只挑一些我不熟悉的细节说一说 1: 对于没有返回值的函数,return语句是可选的,对于有返回值的函数,retur...
  • neooelric
  • neooelric
  • 2015年01月20日 23:38
  • 196

算法---快速排序(quick sort)

在前面介绍的排序算法中,最快的排序算法为归并排序,但是归并排序有一个缺陷就是排序过程中需要O(N)的额外空间。本文介绍的快速排序算法时一种原地排序算法,所需的额外空间复杂度为O(1)。 算法介绍:快...
  • shaya118
  • shaya118
  • 2014年11月16日 21:40
  • 1175

分治算法——快速排序、归并排序算法(Java实现)

排序问题 对序列42,96,23,89,48,75,36,30,57,61用快速排序、归并排序算法,从小到大排序。 算法实现: import java.util.Arrays; /** * 快速排序...
  • zimou5581
  • zimou5581
  • 2016年11月05日 11:46
  • 209
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:那些年,那些值得珍藏的算法
举报原因:
原因补充:

(最多只允许输入30个字)