心胸决定格局,眼界决定境界...

找出两个数组相同的元素

#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;

  

posted @ 2019-02-03 11:55  WELEN  阅读(3793)  评论(0)    收藏  举报