#include<hash_map>
#include<hash_set>
#include<iostream>
int cmp(int x, int y)
{
return x>y ? 1 : 0;//注意,这里返回的是0和1,不是x和y
}
int main(int argc, const char* argv[])
{
//node* root;
//CreateTree(&root);
//printf("recursive_inorder\n");
//MidOrderTree(root);
//printf("\nnon_recursive_inorder\n");
//non_recursive_inorder(root);
int data1[] = { 2, 31, 14, 6, 76, 88, 66, 12, 1 };
int data2[] = { 6, 9, 19, 9, 21, 66 };
//找出两个数组的相同的部分
//1.set装载,可以去重,还可以自动排序(如果data1或者data2中有重复的元素)
//
set<int> data_part1;
//set<int> s(data1, data1 + sizeof(data1) / sizeof(int)); 初始化或者insert
for (int i = 0; i < sizeof(data1) / sizeof(int); i++)
{
data_part1.insert(data1[i]);
}
//for (int i = 0; i < sizeof(data2) / sizeof(int); i++)
//{
// data.insert(data2[i]);
//}
//for (set<int>::iterator ptr = data.begin(); ptr != data.end(); ptr++)
//{
// cout << *ptr << " ";
//}
set<int> data_part2;
for (int i = 0; i < sizeof(data2) / sizeof(int); i++)
{
data_part2.insert(data2[i]);
}
//类似归并比较
set<int>::iterator ptr2;
for (set<int>::iterator ptr1 = data_part1.begin(), ptr2 = data_part2.begin(); ptr1 != data_part1.end(), ptr2 != data_part2.end();)
{
if ((*ptr1) == (*ptr2))
{
cout << (*ptr1) << endl;
ptr1++;
ptr2++;
}
else if ((*ptr1) > (*ptr2))
{
ptr2++;
}
else
{
ptr1++;
}
}
//对于大容量的记录,用hash来处理
//hash_set 只能用来去重
hash_set<int> hs1(data1, data1+sizeof(data1)/sizeof(int));
hash_set<int> hs2(data2, data2+sizeof(data2)/sizeof(int));
hash_set<int>::iterator hs_ptr1 = hs1.begin();
hash_set<int>::iterator hs_ptr2 = hs2.begin();
for (hs_ptr2; hs_ptr2 != hs2.end(); hs_ptr2++)
{
cout << *hs_ptr2<<" ";
}
cout << endl;
//后面的处理同上
/*
sort采用的是成熟的"快速排序算法"(目前大部分STL版本已经不是采用简单的快速排序,而是结合内插排序算法)。注1,可以保证很好的平均性能、复杂度为n*log(n),
由于单纯的快速排序在理论上有最差的情况,性能很低,其算法复杂度为n*n,但目前大部分的STL版本都已经在这方面做了优化,因此你可以放心使用。
stable_sort采用的是"归并排序",分派足够内存是,其算法复杂度为n*log(n), 否则其复杂度为n*log(n)*log(n),其优点是会保持相等元素之间的相对位置在排序前后保持一致。
*/
//sort 默认是升序
//sort(data1, data1 + sizeof(data1) / sizeof(int));
//改成降序
//sort(data1, data1 + sizeof(data1) / sizeof(int), cmp);
//改成部分数据排序
sort(data1+2, data1 + 5, cmp);
for (int i = 0; i < sizeof(data1) / sizeof(int); i++)
{
cout << data1[i] << " ";
}
cout << endl;