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
时间: 2024-10-11 06:44:56