字典排序问题
来源:互联网 发布:姚明场均数据 编辑:程序博客网 时间:2024/06/05 02:46
问题描述
当我们需要对连续存储的长度不一的文本行进行排序时,排序的标准是字母顺序,我们引入指针数组来处理这类问题,这一方法能够消除因移动文本行本身带来的复杂的存储管理和巨大的开销。
我们假设待排序的的文本行首尾相连地存储在一个长字符数组中,那么每个文本行都可以通过他的第一个字符的指针来访问。这些指针本身可以存储在一个数组中。这样,将指向两个文本行的指针传递给strcmp函数就可以实现对两个文本行的比较。 当交换次序颠倒的两个文本行时,只需交换两个文本行相对应的指针即可。代码如下:
#include "stdafx.h"#include "stdio.h"#include "string.h"char *courses[]= { "C", "C++", "PHP", "ASP", "ASP.NET", "C#", "JAVA", "BASIC", "PASCAL", "COBOL" }; //指针数组void sort(char *courses[], int n);int _tmain(int argc, char** argv){int len = 0;len = sizeof(courses)/sizeof(courses[1]);printf("Length: %d\n", len);for (int i = 0; i < len;i++) printf("%s ", courses[i]);printf("\n");sort(courses, len);for (int i = 0; i < len; i++) printf("%s ", courses[i]);printf("\n");return 0;}void sort(char *p[], int n){int i, j, k;char *temp;for (i = 0; i < n-1; i++){ k = i; for (j = i; j < n; j++) { if (strcmp(p[k], p[j])>0) k = j; } temp = p[k]; p[k] = p[i]; p[i] = temp;}}
在上述代码实现过程中碰到两个不错的问题:
如何获得字符串指针数组courses中字符串的数量?
为了解决这个问题,我们首先理解courses是一个指针数组,courses中的数组元素是各文本行的首地址即指向各文本行的指针,所以我们可以用sizeof(courses)获得指针数组的地址长度,然后sizeof(courses[1])获得单个指针的地址长度,那么sizeof(courses)/sizeof(courses[1])
可以获得指针数组中元素的个数。如何比较各个字符串的大小?
在程序中我们用到了标准库string.h
中的strcmp
函数来对两个字符串进行比较,我们采用的排序算法是简单的冒泡算法。下面的代码对strcmp
函数的实现提供了两种不同的思路。/ /strcmp函数 :根据s按照字典顺序小于、等于或大于t的结果分别返回负整数、0或正整数 int strcmp(char *s, char *t){ int i; for(i=0;*s[i]==t[i];i++) if(*s='\0') return 0; return s[i]-t[i];}
下面是用指针方式实现的
strcmp
函数:/ /strcmp函数 :根据s按照字典顺序小于、等于或大于t的结果分别返回负整数、0或正整数 int strcmp(char *s, char *t){ for(;*s==*t;s++,t++) if(*s='\0') return 0; return *s-*t;}
0 0
- 字典排序问题
- Python_字典排序问题
- 字典全排序问题
- 字典序排序问题
- 字典排序问题
- python 字典排序问题
- iOS字典的排序问题
- 南邮-1214-排序的字典序问题
- 数组中是字典的排序问题
- 字符串根据字典值排序问题
- 字典排序问题加强版(java)
- 字典排序
- 字典排序
- 字典排序
- 字典排序
- 字典排序
- 字典排序
- 字典排序
- JSP常用的五个内置对象
- C++常见问题
- 操作系统总结
- 前台进程,会话,控制终端,用户的关系
- 破零(KISS)
- 字典排序问题
- Comparable接口的实现和使用
- gif动态图的获取
- docker 使用网桥实现跨主机容器链接
- L0/L1/L2范数的联系与区别
- 《深入理解JAVA虚拟机》第二章
- 前端工程——基础篇
- 为什么多年经验的程序员都喜欢用命令行
- Uva129_构造困难的字符串