求出数组前面k个元素或数组中元素大于一半的元素(快速排序与堆排序的灵活运用)
写这个的目的在于,说明快速排序的灵活运用。我们来看下关于快速排序中的一部分关键代码:
int a[101],n;//定义全局变量,这两个变量需要在子函数中使用void quicksort(int left,int right){int i,j,t,temp;if(left>right)return;temp=a[left]; //temp中存的就是基准数i=left;j=right;while(i!=j){//顺序很重要,要先从右边开始找while(a[j]>=temp && i<j)j--;//再找右边的while(a[i]<=temp && i<j)i++;//交换两个数在数组中的位置if(i<j){t=a[i];a[i]=a[j];a[j]=t;}}//最终将基准数归位a[left]=a[i];a[i]=temp;quicksort(left,i-1);//继续处理左边的,这里是一个递归的过程quicksort(i+1,right);//继续处理右边的 ,这里是一个递归的过程}

int partition_quickSort(int *arr,int start,int end){
int cmp_val=arr[start];int i=start;int j=end;while(i!=j){while(i<j&&arr[j]>=cmp_val){j--;}while(i<j&&arr[i]<=cmp_val){i++;}if(i<j){int ex_temp=arr[j];arr[j]=arr[i];arr[i]=ex_temp;}}arr[start]=arr[i];arr[i]=cmp_val;return i;}




int partition_quickSort(int *arr,int start,int end)

int moreThanHalfNum_Partition(int *arr,int Length){if(arr==NULL||Length==0){return 0;}int low=0;int high=Length-1;int mid=Length>>1;int index= partition_quickSort(arr,low,high);while(index!=mid){if(index>mid){index= partition_quickSort(arr,low,index-1);}else{index= partition_quickSort(arr,index+1,high);}}int key=arr[mid];if(isMoreHalf(arr,Length,key)){return key;}else{return 0;}}
index>mid

index= partition_quickSort(arr,low,index-1);

index= partition_quickSort(arr,index+1,high);

int partition_quickSort(int *arr,int start,int end){int cmp_val=arr[start];int i=start;int j=end;while(i!=j){while(i<j&&arr[j]>=cmp_val){j--;}while(i<j&&arr[i]<=cmp_val){i++;}if(i<j){int ex_temp=arr[j];arr[j]=arr[i];arr[i]=ex_temp;}}arr[start]=arr[i];arr[i]=cmp_val;return i;}
bool minKDataBeforeArr(int *arr,int Length,int k_bef){if(arr==NULL||k_bef>Length){return false;}int start=0;int k_index=0;int end=Length-1;k_index=partition_quickSort(arr,start,end);while(k_index!=k_bef-1){if(k_index>k_bef-1){end=k_index-1;k_index=partition_quickSort(arr,start,end);}else{start=k_index+1;k_index=partition_quickSort(arr,start,end);}}for(int i=0;i<k_bef; i++){for(int j=k_bef;j<Length; j++){if(arr[i]>arr[j]){return false;}}}return true;}
求出数组前面k个元素或数组中元素大于一半的元素(快速排序与堆排序的灵活运用)的更多相关文章
- 使用jQuery匹配文档中所有的li元素,返回一个jQuery对象,然后通过数组下标的方式读取jQuery集合中第1个DOM元素,此时返回的是DOM对象,然后调用DOM属性innerHTML,读取该元素 包含的文本信息
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 从N个元素的集合中随机取m个元素的算法实现
最近有一个需求,比较简单,就是如标题所说的,从N个元素中随机取m个元素,当然这m个元素是不能存在重复的.本以为这么简单的需求,应该有现成的工具类来实现,但是几次查找居然没找到(有知道的可以推荐下哈^_ ...
- Js/Jquery获取iframe中的元素 在Iframe中获取父窗体的元素方法
在web开发中,经常会用到iframe,难免会碰到需要在父窗口中使用iframe中的元素.或者在iframe框架中使用父窗口的元素 js 在父窗口中获取iframe中的元素 1. 格式:window ...
- 定义抽象类Shape,抽象方法为showArea(),求出面积并显示,定义矩形类Rectangle,正方形类Square,圆类 Circle,根据各自的属性,用showArea方法求出各自的面积,在main方法中构造3个对象,调用showArea方法。(体现多态)
实现多态的三个条件:1.要有继承2.要有抽象方法重写3.用父类指针(引用)指向子类对象 重载重写重定义的区别: 1.重载:在同一个类中进行; 编译时根据参数类型和个数决定方法调用; 子类无法重载父类; ...
- 输出数组第k大的元素
用快速排序的思想输出数组第k大的元素: #include<iostream> #include<algorithm> using namespace std; //递归实现:返 ...
- 一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。
主要掌握String中的方法 char[] toCharArray() 将此字符串转换为一个新的字符数组. int indexOf(String str) 返回 ...
- CSS中伪类及伪元素用法详解
CSS中伪类及伪元素用法详解 伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...
- CSS中2d转换:transition过渡放在:hover伪类中与应用在整个元素中区别
css的2d转换十分强大,能够在不使用js的情况下,实现页面的元素与用户之间更多动态的交互,增强用户体验.其中使用最多的就是hover伪类. 1.创建一个页面的div元素: <!DOCTYPE ...
- 如何求出数组中最小(或者最大)的k个数(least k问题)
输入n个整数,如何求出其中最小的k个数? 解法1. 当然最直观的思路是将数组排序,然后就可以找出其中最小的k个数了,时间复杂度以快速排序为例,是O(nlogn): 解法2. 借助划分(Partitio ...
随机推荐
- Codeforces Round #373 (Div. 2) B
Description Anatoly lives in the university dorm as many other students do. As you know, cockroaches ...
- 【Javascript】列表查询页面,简单地保存上一次查询的查询参数
开发中经常做一些查询参数 + 列表参数的功能,这些功能有时候需提供导出Excel,或带超链接到其他明细页面的功能点. 在一些交互性要求严格的系统,需求方会要求: 用户第一个输入某些查询条件进行列表查询 ...
- CentOS 6.5中linux grub修复
在使用Linux的过程中,难免会出现开机提示grub >而无法启动,可能是系统中/boot/grub文件丢失等原因造成的,当出现此问题的时候只要系统分区没有格式化一般是可以修复的,下面就以虚拟 ...
- c#中struct和class的区别 详细[转]
转自:http://blog.csdn.net/justlovepro/archive/2007/11/02/1863734.aspx 有这么几点不同: 1.struct 是值类型,class是对象类 ...
- 卡尔曼滤波— Constant Velocity Model
假设你开车进入隧道,GPS信号丢失,现在我们要确定汽车在隧道内的位置.汽车的绝对速度可以通过车轮转速计算得到,汽车朝向可以通过yaw rate sensor(A yaw-rate sensor is ...
- R 给data.frame(dataframe)添加一列
x<-data.frame(apple=c(1,4,2,3),pear=c(4,8,5,2)) x # apple pear # 1 1 4 # 2 4 8 # 3 2 5 # 4 3 2 x$ ...
- spring引入实体类映射文件
由于spring对hibernate配置文件hibernate.cfg.xml的集成相当好 LocalSessionFactoryBean有好几个属性用来查找hibernate映射文件: mapp ...
- SQL Group By/Having
有时候需要检查DataBase里面是不是存在重复的数据,那么比较常用的就是通过Group By来进行分组,然后Having出来,如下: ))
- HDU 5831 Rikka with Parenthesis II(六花与括号II)
31 Rikka with Parenthesis II (六花与括号II) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536 ...
- LINQ 如何实现 in 与 not in
T-SQL的IN: Select ProductID, ProductName, CategoryID From dbo.Products Where CategoryID , ) T-SQL的NOT ...