算法(快速排序)

[size=medium]快速排序就是把某一个值排到中间,比如:第一个值跟最后一个开始比,如果比第一个值小,就交换位置,然后再从第一个位置开始找比他大的值,进行交换。[/size]
java代码:参考了百科里面的例子

package zy.boring.order.impl;

import zy.boring.order.QuickOrder;

public class QuickOrderImpl implements QuickOrder {

@Override
public int[] quickOrder(int[]data, int low, int high) {
//定义局部变量i,j,初始i,j是递归的首位两个元素的索引
int i = low;
int j = high;
//一开始老不能结束递归,加了这句
if(low<high){
//确定数组第一个元素为目标元素
int keyInt = data[i];
//确保i始终小于j
while(i<j){
//首先通过第一个元素(keyInt)跟从末尾开始的元素逐一比较,找到比keyInt小的元素
while(i<j && keyInt<data[j]){
j--;
}
//把data[i]交换
if(i<j){
data[i] = data[j];
//焦点向右移
i++;
}
//通过keyInt从头开始的元素逐一比较,找到比keyInt大的元素
//这里开始的时候没有加i<j这句,导致了错误,要时刻保持i<j
while(i<j && keyInt>data[i]){
i++;
}
//data[j]交换
if(i<j){
data[j] = data[i];
//焦点向左移
j--;
}
}
data[i] = keyInt;
//调用递归,分别把左半边跟又半边进行排序
quickOrder(data,low,i);
quickOrder(data,i+1,high);
}
return data;
}

}


虽然参考了例子,但还是遇到一些问题,也看到自己的一些不足。
不常编码,junit的使用,递归函数

写了相应的测试,不知道合不合理。
开始的时候判断两个数组是否相等还自己写了一大堆,后来发现原来有工具类可以来用,这里用到了Arrays的工具类。

package zy.boring.order.impl.test;

import java.util.Arrays;

import junit.framework.TestCase;
import zy.boring.order.QuickOrder;
import zy.boring.order.impl.QuickOrderImpl;

public class QuickOrderImplTest extends TestCase {

protected void setUp() throws Exception {
super.setUp();
}

public void testQuickOrder() {
int[] testInt = {5,9,3,8,2,1,6,7};
int[] expectInt = {1,2,3,5,6,7,8,9};
QuickOrder quickOrder = new QuickOrderImpl();
int[] actureInt = quickOrder.quickOrder(testInt, 0, testInt.length-1);
//用数组工具Arrays来比较是否
assertTrue(Arrays.equals(actureInt, expectInt));
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值