相对优先排序和绝对优先排序的效率比较

4 篇文章 0 订阅
package tezhongbing.sort;


import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;


import org.apache.commons.lang.math.RandomUtils;
/**
 * 相对优先排序和绝对优先排序的效率比较
 * @author zhaoyujie
 *相对优先排序就是下标位置为k的元素和k/2位置的元素比较,如果k位置的元素小于k/2位置的元素,就互换。按照这个规则继续向前比较。
 *相对排序比绝对排序的效率高,并且随着要排序元素数量的增加,效率的差距越大。
 */
public class RelativeAndAbsoluteSort {
private static List<Integer> list = new ArrayList<Integer>();
private static List<Integer> list2 = new ArrayList<Integer>();
public static void main(String[] args) {
for(int i=0;i<100000;i++){
list.add(RandomUtils.nextInt());
}
list2.addAll(list);

sortRelativeList();
sortAbsoluteList();
}


private static void sortAbsoluteList() {
long begin = System.currentTimeMillis();
Collections.sort(list2, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;
}
});
long end = System.currentTimeMillis();
System.out.println("绝对优先排序用时:"+(end-begin)+"毫秒");
}


private static void sortRelativeList() {
long begin = System.currentTimeMillis();
for (int i = 0; i < list.size(); i++) {
siftUp(i);
}
long end = System.currentTimeMillis();
System.out.println("相对优先排序用时:"+(end-begin)+"毫秒");
}

private static void siftUp(int k) {
Integer x = list.get(k);
        while (k > 0) {
            int parent = (k - 1) >>> 1;
            Integer e = list.get(parent);
            if (x >= e)
                break;
            list.set(k, e);
            k = parent;
        }
        list.set(k, x);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值