王老师 c范型编程举例

原创 2006年05月27日 18:54:00

对于n < 20,插入排序是比快速,堆,归并更快的排序算法.

对于整数数组排序,示例程序如下:

#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));
}

如何对任意类型的数组排序?

系统提供了qsort函数,原型如下:

_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]);

}

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

懒得一步一步走楼梯,于是有了电梯;懒得走路,于是他们制造出了汽车、火车、飞机;懒得去计算,于是发现了计算器;懒得重复写代码,于是有了C++之中的泛型编程!        当然,上面那段话是我瞎掰的,真...
  • Loving_Forever_
  • Loving_Forever_
  • 2016年06月28日 22:37
  • 2431

100多种编程语言学什么?编程范型/编程范式

回想一下, 其实编程语言基础到了很多, 大学时的 C, C++,  C#  , Java, 数据库SQL,  汇编。  毕业后的 Lua, Python , Golang, Ruby ,  javaS...
  • u010019717
  • u010019717
  • 2017年08月07日 22:40
  • 1352

面向过程、面向对象和泛型编程

1、面向对象和面向过程
  • liminlimin_limin
  • liminlimin_limin
  • 2014年09月29日 10:22
  • 2125

理解编程范型

理解编程范型所谓编程模型就是每种程序设计语言其开发都存在自己的编程模型. 四大编程范型面向对象编程模型如今面向对象无疑是最强势的编程范型,而java正是面向对象语言的典型代表. 这种范型有三大主要思想...
  • nicewuranran
  • nicewuranran
  • 2016年10月19日 21:02
  • 462

泛型程序设计

泛型介绍 泛型程序设计(Generic programming):可以被很多不同的类型的对象所重用。比那些直接使用Object变量,然后强制类型的转换的代码具有更好的安全性和可读性。 使用类型参数(...
  • colin_yjz
  • colin_yjz
  • 2015年06月27日 19:18
  • 993

Objective C范型

范型 范型编程是一种程序语言设计范式,它允许程序员在使用强类型的语言编写代码的时候,延迟确定具体的类型。 以Swift代码为例,假如有一个需求是要交换两个int,很容易写出类似代码 func...
  • Hello_Hwc
  • Hello_Hwc
  • 2018年01月07日 14:51
  • 139

C 语言中模拟“泛型”

一般在写 C 程序时用 typedef 将容器中元素的类型抽象,无法在同一个程序中用到两种类型,而本文试图在一个程序中用到两种不同类型的容器,比如实现类似于 C++ 中的 vector 和 vecto...
  • Justme0
  • Justme0
  • 2014年02月07日 22:44
  • 2881

C++泛型编程思想方法总结

C++泛型编程思想方法总结 2015-08-15 15:39 1126人阅读 评论(0) 收藏 举报  分类: 重构/设计模式/架构(34)  CC++Design(40)  版权声...
  • lltaoyy
  • lltaoyy
  • 2017年02月16日 17:22
  • 518

《泛型编程与STL》读书笔记

本书从概念和设计上讲述了泛型编程。个人认为只需要阅读前面九章即可(实际上我只读了前面七章),后面章节是一些算法和API的讲述,可以在用到的时候再来查阅。 全书N次提到concept,model以及re...
  • mr_cai2009
  • mr_cai2009
  • 2015年01月05日 17:01
  • 1182

《分布式系统原理与范型》第二版笔记

书籍的获取渠道: 1、购买;2、search in the net。 第一章 1、分布式系统定义 分布式系统是若干独立计算机的集合,这些计算机对于用户来说就好像是单个相关系统。   a:机器本身是独...
  • m1361459098
  • m1361459098
  • 2016年03月17日 19:38
  • 919
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:王老师 c范型编程举例
举报原因:
原因补充:

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