求出数组前面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 ...
随机推荐
- css公共样式,初始化
/* CSS Document */ body, button, select, textarea, input, label, option, fieldset, legend{font-famil ...
- 2017年1月7日 星期六 --出埃及记 Exodus 21:33
2017年1月7日 星期六 --出埃及记 Exodus 21:33 "If a man uncovers a pit or digs one and fails to cover it an ...
- Windows7下安装搭建Ngnix教程
简介: Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 服务器. Nginx 是由 Igor Syso ...
- 【leetcode❤python】235. Lowest Common Ancestor of a Binary Search Tree
#-*- coding: UTF-8 -*- # Definition for a binary tree node.# class TreeNode(object):# def __init ...
- N年后给自己一些忠诚的建议
给自己S年后的一封信: 也许,现在的自己已经经历了种种历练,或成为干将,许是拔杆而起的创业者,再者仍然是一名奋斗中的工薪族.无论现在如何,请记得: M年前,自己坐在小房子里写下的信件. 那时候,自己是 ...
- java虚拟机能并发的启动多少个线程
新建一个类,导入如下的测试代码: public class TestNativeOutOfMemoryError { public static void main(String[] args) { ...
- Gradle的配置实例
错过了Maven,但是遇到了Gradle. 网上关于Gradle的讲解和培训已经很多了. 我就直接贴几个我测试过的配置文件吧: ① 依赖maven资源库 repositories { mavenCen ...
- 如何查看postfix的版本
[root@localhost sasl2]# postconf -d | grep mail_versionmail_version = 2.10.1milter_macro_v = $mail_n ...
- tophat cufflinks cuffcompare cuffmerge 的使用
Cole Trapnell said: there are three strategies: 1) merge bams and assemble in a single run of Cuffli ...
- [SAP ABAP开发技术总结]动态语句、动态程序
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...