###### 王老师 c范型编程举例

#include <stdio.h>

void sort(int *array, int n)
{
//下标
int i, j;

//暂存待排序元素
int tmp;

for(i = 1; i < n; i++)
{
tmp = array[i];
j = i - 1;
//寻找插入位置
while(j >= 0 && array[j] > tmp)
{
array[j + 1] = array[j];
j--;
}
array[j + 1] = tmp;
}
}

//打印数组元素
void print(int *array, int n)
{
for(int i = 0; i < n; i++)
{
printf("%d/t", array[i]);
}
}

void main()
{
int a[] = {1, 3, 5, 8, 9, 4, 6, 7, 2};
sort(a, sizeof(a) / sizeof(int));
print(a, sizeof(a) / sizeof(int));
}

_CRTIMP void   __cdecl qsort(void *, size_t, size_t, int (__cdecl *)
(const void *, const void *));

今天老师讲了一下，这里把代码贴一贴。
#include <stdio.h>
#include <memory.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>

void sort_general(void *array, int n, int w, int (*c)(void *, void *))
{
//下标
int i, j;

char *x;
x = (char *)malloc(w);

for(i = 1; i < n; i++)
{
memmove(x, (char *)array + i * w, w);

j = i - 1;
//寻找插入位置
while(j >= 0 && (*c)((char *)array + j * w, x))
{
memmove((char *)array + (j + 1) * w, (char *)array + j * w, w);
j--;
}
memmove((char *)array + (j +1) * w, x, w);
}
}

int greater(void *p, void *q)
{
int *pp, *qq;
pp = (int *)p;
qq = (int *)q;
return (*pp) > (*qq);
}

//打印数组元素
void print(int *array, int n)
{
int i = 0;
for( i = 0; i < n; i++)
{
printf("%d/t", array[i]);
}
}

/*
* 指针数组:一个数组,每个元素都是指针
*/
int buildeDic(char *dic, char *pointer[])
{
printf("please input words, space by tab, ends with #./n");

int num = 0;
pointer[0] = dic;

while(1)
{
*dic = getchar();
if('a' <= *dic && 'z' >= *dic)
{
dic++;
continue;
}
if(*dic == ' ')
{
*dic ++ = '/0';
num++;
pointer[num] = dic;
}else{
*dic = '/0';
num++;
return num;
}
}
}

int greater_str(void *p, void *q)
{
char **pp = (char **)p;
char **qq = (char **)q;
return strcmp(*pp, *qq) > 0;
}

void main()
{
int a[] = {1, 3, 5, 8, 9, 4, 6, 7, 2};
sort_general(a, sizeof(a) / sizeof(int), sizeof(int), greater);
print(a, sizeof(a) / sizeof(int));
printf("/n");

/*
* 指针数组
*/
char dic[1000];
char *dic_pointer[100];
int num = buildeDic(dic, dic_pointer);

sort_general(dic_pointer, num, sizeof(char *), greater_str);
for(int j = 0; j < num; j++)
printf("%s/t", dic_pointer[j]);

}

#### “懒人”的福音---泛型编程

2016-06-28 22:37:59

#### 理解编程范型

2016-10-19 21:02:11

#### c++ 设计新思维,范型编程与设计模式part1

2008年03月21日 3.79MB 下载

#### 3种编程范型

2018-01-22 16:13:44

#### DSP：C源程序举例

2008年03月13日 96KB 下载

#### “主要的编程范型”及其语言特性关系（多图）

2009-10-10 04:31:00

#### 泛型编程 vs. 面向对象

2005-08-10 14:30:00

#### 什么是范型编程

2007-06-20 15:14:00

#### 七周七语言.理解多种编程范型.书签清晰版.文字版

2017年09月24日 7.74MB 下载

#### C++设计新思维

2007年05月18日 13.82MB 下载