对数组依照某一基准进行整理

题目:给定一个整数数组。把最右端的元素作为基准,对这个数组进行整理。当中大于这个基准的元素放到它的右边,小于这个基准的元素放到它的左边。不得使用暂时数组。

思路:先找一个大于基准的元素与基准进行交换位置,此时基准元素已经在数组的中部(不是最右/中间),从基准開始向后扫描,小于基准则交换。

public class ArrayPivot {
	public static void main(String[] args) {
		int[] c = pivot(new int[] { 2, 3, 5, 1, 6, 4 });
		for (int i = 0; i < c.length; i++)
			System.out.print(c[i] + ",");
	}

	public static int[] pivot(int[] a){
		int len = a.length;
		if(len <= 1)
			return a;
		int p = a[len - 1];
		int i = 0,temp = 0;;
		//第一次大于p的时候
		for(i=0;i<len;i++){
			if(a[i] > p){
				temp = a[i];
				a[i] = a[len - 1];
				a[len - 1] = temp;
				break;
			}
		}
		for(;i<len -1;i++){
			if(a[i+1] < a[i] && a[i+1] < p){
				temp = a[i+1];
				a[i+1] = a[i];
				a[i] = temp;
			}
		}
		return a;
	}
}
时间: 2024-11-10 01:26:16

对数组依照某一基准进行整理的相关文章

对数组按照某一基准进行整理

题目:给定一个整数数组,把最右端的元素作为基准,对这个数组进行整理,其中大于这个基准的元素放到它的右边,小于这个基准的元素放到它的左边.不得使用临时数组. 思路:先找一个大于基准的元素与基准进行交换位置,此时基准元素已经在数组的中部(不是最右/中间),从基准开始向后扫描,小于基准则交换. public class ArrayPivot { public static void main(String[] args) { int[] c = pivot(new int[] { 2, 3, 5, 1

Java快速排序 分别以数组0位作为基准 和最后一位作为基准的排序演示

package util; public class Pub { public static void beforeSort(int[] arr){ System.out.println("before sort: "); for(int i:arr){ System.out.print(i+" "); } System.out.println(); } public static void afterSort(int[] arr){ System.out.prin

linux学习:特殊符号,数学运算,图像与数组与部分终端命令用法整理

一:特殊符号用法整理 算术比较-eq 等于-ne 不等于-gt 大于-lt 小于-ge 大于或等于-le 小于或等于-a 逻辑与 and &&-o 逻辑或 or ||[ $var -eq 0 ]    #当$var等于0时,返回真[ $var -ne 0 ]    #当$var为非0时,返回真[ $var1 -ne 0 -a $var2 -gt 2 ][ $var1 -ne 0 -o $var2 -gt 2 ] 字符串比较[[ $str1 = $str2 ]]     #当str1等于st

PHP一维数组和二维数字排序整理

<?php /** 一维数组排序 sort() - 以升序对数组排序 rsort() - 以降序对数组排序 asort() - 根据值,以升序对关联数组进行排序 ksort() - 根据键,以升序对关联数组进行排序 arsort() - 根据值,以降序对关联数组进行排序 krsort() - 根据键,以降序对关联数组进行排序 */ $arr = array(1,3,5,2,4,6); //sort($arr); //rsort($arr); //var_dump($arr); $arr = ar

整理数组去重的几种常用方法

最近面试有一个面试题,要求尽可能多的列举数组去重的方法,现整理一下 1.最简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ function uniq(array){ var temp = []; //一个新的临时数组 for(var i = 0; i < array.length; i++){ if(temp.indexOf(array[i]) == -1){ temp.pu

Linux Shell编程(3):数组

http://snailwarrior.blog.51cto.com/680306/154704 BASH只支持一维数组,但参数个数没有限制. 声明一个数组:declare -a array (其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组) 数组赋值:(1) array=(var1 var2 var3 ... varN)(2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)(3) array[0]=var1    arrya[

数状数组求逆序对

逆序对在很多地方用的到.以前都是用归并排序或线段树求,在<mato的文件管理>看到有人用树状数组求,很简单!整理如下: 思路: 首先,开一个大小为这些数的最大值的数组,作为树状数组. 然后,将各个数按顺序依次加入该数组.方法为:这个数大小对应的它在线段树中的位置,对这个位置上的数加1,并更新树状数组.所以当前树状数组中存着所有原数字序列中当前数前面的数,而getsum(i)就是 i 前面小于等于 i 的数的个数.i-getsum(i)-1也就是大于它的个数.这就是逆序对了. 把每一个的逆序对数

从js的repeat方法谈js字符串与数组的扩展方法

js将字符串重复N次的repeat方法的8个版本 /* *@desc: 将一个字符串重复自身N次 */ //版本1:利用空数组的join方法 function repeat(target, n) { return (new Array(n + 1)).join(target); } //版本2:之所以要创建一个带length属性的对象 是因为要调用数据的原型方法,需要指定call的第一个参数为类数组对象 //类数组对象的必要条件是其length属性的值为非负数 function repeat(t

javascript数组方法

javascript有许多数组方法,今天整理了一下: var a=[1,2,3]; a.join();//将数组中所有元素都转化为字符串并连接在一起,参数作为分隔符. a.reverse();//将数组中的元素点到顺序,返回逆序数组. a.sort();//将数组中的元素排序并返回排序后的数组. a.concat();//创建并返回一个新数组,其中返回数组包括a中元素和参数. a.slice();//方法返回制定数组的一个片段或子数组,通过下标作为参数截取. a.splice();//在数组中插