编程珠玑(产品篇)

来源:互联网 发布:淘宝买沙发靠谱吗 编辑:程序博客网 时间:2024/05/22 03:53

第十一章

关于排序函数
sort1中不断地给t赋相同的初始值,可以利用sot2的方法改进
#include<stdio.h>void sort1() {for(int i =1; i < n; i++) {for(int j = i; j > 0 && x[j-1]>x[j]; j--) {t = x[j];x[j] = x[j-1];x[j-1] = t;}}}void sort2() {for (int i = 1; i < n; i++) {t = x[i];for (int j = i; j > 0 && x[j-1] > t; j--)x[j] = x[j-1];x[j] = t;}}

快速排序,堆排序,二分查找之前已经写过,这里就不写了。
文本中的单词个数统计,可用哈希或者STL中的map。
查找给定字符串中的最长重复子串,利用后缀数组。根据书上的例子实现的代码如下:
#include <stdio.h>#include <string.h>#include <iostream>using namespace std;#include <algorithm>#define MAXN 1024char str[MAXN];char *suffix[MAXN];bool cmp(char *a, char *b) {if (strcmp(a,b) < 0)return 1;return 0;}int comlen(char *a, char *b) {int l1 = strlen(a);int l2 = strlen(b);int i = 0;while (i < l1 && i < l2 && a[i] == b[i])i++;return i;}int main() {int n = 0;int i;int maxl = 0;scanf("%s", &str);n = strlen(str);for (i=0;i<n;i++)suffix[i] = &str[i];sort(suffix, suffix + n, cmp);for (i=0;i<n;i++)printf("%s\n", suffix[i]);for (i=0;i<n-1;i++) {if (comlen(suffix[i], suffix[i+1]) > maxl) maxl = comlen(suffix[i], suffix[i+1]);}printf("%d\n", maxl);return 0;}



原创粉丝点击