day21桶排序一个无序数组+求一个无序数组中的中位数
来源:互联网 发布:java实现国际化 编辑:程序博客网 时间:2024/06/06 03:14
int a[] = {12,13,12,13,19,18,15,12,15,16,17},要求对数组a进行排序,要求时间复杂度为O(N)
void BucketSort(int array[], int size){ assert(array && size > 0); int max = array[0]; int min = array[0]; for(int i = 1; i < size; ++i) { max = array[i]>max?array[i]:max; min = array[i]<min?array[i]:min; } int rang = max - min +1; int *bucket = new int[rang]; memset(bucket, 0, sizeof(int)*4); for(int i = 0; i < size; ++i) { bucket[ array[i]-min ] ++; } int index = 0; for(int i = 0; i < rang; ++i) { for(int j = 0; j < bucket[i]; ++j) { array[index++] = min+i; } } delete [] bucket;}
求一个无序数组的中位数。
如:{2,5,4,9,3,6,8,7,1}的中位数为5,{2,5,4,9,3,6,8,7,1,0}的中位数为4和5。
要求:不能使用排序,时间复杂度尽可能低。
void Mid(int array[], int size){ assert(array && size > 0); priority_queue<int> max_heap; priority_queue<int, vector<int>, greater<int> > min_heap; for(int i = 0; i < size; ++i) { if(i %2 == 1) //偶数进最小堆 { min_heap.push(array[i]); } else { max_heap.push(array[i]); } if(!min_heap.empty() && !max_heap.empty() ) //保证最小堆中所有的元素都大于最大堆中的元素。 { int temp = max_heap.top(); min_heap.push(temp); max_heap.pop(); temp = min_heap.top(); max_heap.push(temp); min_heap.pop(); } } if(size %2 == 0) //偶数 { cout <<"偶数个元素时中位数是:"<< max_heap.top() << " "<< min_heap.top()<<endl; } else { cout <<"奇数个元素时中位数是:"<< max_heap.top()<<endl; }}
阅读全文
0 0
- day21桶排序一个无序数组+求一个无序数组中的中位数
- 求一个无序数组的中位数
- 求一个无序数组的中位数
- 求一个无序数组的中位数。
- 求一个无序数组的中位数
- 求一个无序数组的中位数
- 求一个无序数组的中位数
- 求一个无序数组的中位数
- 找出一个无序数组的中位数
- 求无序数组的中位数
- 求无序数组的中位数
- 求无序数组的中位数
- 求无序数组的中位数
- 求无序数组的中位数
- 无序数组中求中位数
- 对有限数组进行计数排序和求一个无序数组的中位数——题集(十八)
- 求无序数组的中位数(转载)
- 【算法】无序数组中求中位数
- Audio 环形buffer
- 时隔好几个好几天,又到js
- 插入排序(内附代码)
- 使用xshell链接Linux
- SSM(spring +springmvc +mybatis)框架搭建
- day21桶排序一个无序数组+求一个无序数组中的中位数
- HDU 4912 LCA+策略
- Java中Synchronized的用法
- 浅谈最短路中的Dijskra算法
- 链表创建队列
- openSession和getCurrentSession区别
- KMP 算法(1):如何理解 KMP
- Spark RDD API
- 批量提取一个文件夹中的文件名