高级排序-划分

package g_advancedSort.B_partition;


/**
 * 划分:数据分成2组,大于关键字的右边,小于关键字的左边。
 * 
 * @author Administrator
 *
 */
public class PartitionApp {
public static void main(String[] args) {
int maxSize = 16;
ArrayPar arr = new ArrayPar(maxSize);
for (int j = 0; j < maxSize; j++) {
long n = (int) (Math.random() * 199);
arr.insert(n);
}
arr.displays();

long pivot = 99;
System.out.println("Pivot = " + pivot);
int size = arr.size();


int partDex = arr.partitionIt(0, size - 1, pivot);


System.out.println("Partition index =" + partDex);
arr.displays();
}
}package g_advancedSort.B_partition;


public class ArrayPar {
private long[] arr;
private int nElems;


public ArrayPar(int max) {
arr = new long[max];
nElems = 0;
}


public void insert(long d) {
arr[nElems++] = d;
}


public int size() {
return nElems;
}


public void displays() {
System.out.print("A = ");
for (int i = 0; i < nElems; i++)
System.out.print(arr[i]+" ");
System.out.println();
}


/*
* 划分
*/
public int partitionIt(int left, int right, long pivot) {
int leftPtr = left - 1;
int rightPtr = right + 1;
while (true) {
// leftPtr < right:控制循环,避免数组下标越界
while (leftPtr < right && arr[++leftPtr] < pivot)//找到更大的项目
;
// rightPtr > left:控制循环
while (rightPtr > left && arr[--rightPtr] > pivot)//找到更小的项目
;
if (leftPtr >= rightPtr)
break;
else
swap(leftPtr, rightPtr);//交换
}
return leftPtr; //返回分区
}


/*
* 交换
*/
private void swap(int dex1, int dex2) {
long temp;
temp = arr[dex1];
arr[dex1] = arr[dex2];
arr[dex2] = temp;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值