码迷,mamicode.com
首页 > 其他好文 > 详细

“《编程珠玑》(第2版)第一章”:课后习题

时间:2015-03-20 21:47:21      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:

  1. 如果不缺内存,如何使用一个具有库的语言来实现一种排序算法表示和排序集合?

  1)可以使用C语言中的快速排序qsort(参考自cplusplus),具体代码如下:

技术分享
 1 /* qsort example */
 2 #include <stdio.h>      /* printf */
 3 #include <stdlib.h>     /* qsort */
 4 
 5 int values[] = { 40, 10, 100, 90, 20, 25 };
 6 
 7 int compare(const void * a, const void * b)
 8 {
 9     return (*(int*)a - *(int*)b);
10 }
11 
12 int main()
13 {
14     int n;
15     qsort(values, 6, sizeof(int), compare);
16     for (n = 0; n < 6; n++)
17         printf("%d ", values[n]);
18     return 0;
19 }
qsort

  关于qsort,有一篇博文写的不错,可以参考。

  2)可以使用C++标准模板库函数sort(参考自cplusplus),具体代码如下:

技术分享
 1 // sort algorithm example
 2 #include <iostream>     // std::cout
 3 #include <algorithm>    // std::sort
 4 #include <vector>       // std::vector
 5 
 6 bool myfunction(int i, int j) { return (i < j); }
 7 
 8 struct myclass {
 9     bool operator() (int i, int j) { return (i < j); }
10 } myobject;
11 
12 int main() {
13     int myints[] = { 32, 71, 12, 45, 26, 80, 53, 33 };
14     std::vector<int> myvector(myints, myints + 8);               // 32 71 12 45 26 80 53 33
15 
16     // using default comparison (operator <):
17     std::sort(myvector.begin(), myvector.begin() + 4);           //(12 32 45 71)26 80 53 33
18 
19     // using function as comp
20     std::sort(myvector.begin() + 4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)
21 
22     // using object as comp
23     std::sort(myvector.begin(), myvector.end(), myobject);        //(12 26 32 33 45 53 71 80)
24 
25     // print out content:
26     std::cout << "myvector contains:";
27     for (std::vector<int>::iterator it = myvector.begin(); it != myvector.end(); ++it)
28         std::cout <<   << *it;
29     std::cout << \n;
30 
31     return 0;
32 }
sort

  3)可以利用C++标准模板库容器set来完成相同的功能:

  摘自一篇博文对set容器的简介:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。可以使用中序遍历(用迭代器)将键值按照从小到大遍历出来。

  关于set容器更详细的介绍请参照cplusplus

  具体代码如下:

技术分享
 1 #include <iostream>
 2 #include <set>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int myints[] = { 65, 23, 75, 42, 13 };
 8     set<int> myset(myints, myints + 5);    // use ‘set‘ member function ‘insert‘ is also ok.
 9 
10     set<int>::iterator itr = myset.begin();
11     for (; itr != myset.end(); itr++)
12     {
13         cout << *itr << " ";    // 13, 23, 42, 65, 75
14     }
15 
16     return 0;
17 }
set

 

 

 

 

 

 

  

“《编程珠玑》(第2版)第一章”:课后习题

标签:

原文地址:http://www.cnblogs.com/xiehongfeng100/p/4354640.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!