利用选择、冒泡、二叉树三种排序方法对40000个随机数字进行排序,比较三种排序方法的时间。
/*
//选择法排序
public static void main(String[] args) {
long StartTime = System.currentTimeMillis();
int num[] = new int[40000];
for (int i = 0; i < 40000; i++) {
int number = (int)(Math.random()*5000+1000);
num[i] = number;
}
for (int i = 0; i < num.length - 1; i++) {
for (int j = i+1; j < num.length; j++) {
if (num[i] < num[j]){
int temp = num[j];
num[j] = num[i];
num[i] = temp;
}
}
}
for (int i = 0; i < num.length; i++) {
System.out.println(num[i]);
}
long EndTime = System.currentTimeMillis();
System.out.println("选择排序法所需时间:" + (EndTime - StartTime) + "毫秒");
}
*/
//冒泡排序法
public static void main(String[] args) {
long StartTime = System.currentTimeMillis();
int num[] = new int[40000];
for (int i = 0; i < 40000; i++) {
int number = (int)(Math.random()*5000+1000);
num[i] = number;
}
for (int i = 0; i < num.length ; i++) {
for (int j = 0; j < num.length-i-1; j++) {
if (num[j] < num[j+1]){
int temp = num[j];
num[j] = num[j+1];
num[j+1] = temp;
}
}
}
for (int i = 0; i < num.length; i++) {
System.out.println(num[i]);
}
long EndTime = System.currentTimeMillis();
System.out.println("冒泡排序法所需时间:" + (EndTime - StartTime) + "毫秒");
}
/*
//二叉树排序法
public class Node {
public Node LeftNode;
public Node RightNode;
public Object value;
public void add(Object v){
if (value == null){
value = v;
}
else{
if ((Integer) v - ((Integer)value) <= 0){
if (null == LeftNode){
LeftNode = new Node();
}
LeftNode.add(v);
}
else{
if (null == RightNode){
RightNode = new Node();
}
RightNode.add(v);
}
}
}
//中序遍历
public List<Object> values(){
List<Object> values = new ArrayList<>();
//左节点排序
if (LeftNode != null){
values.addAll(LeftNode.values());
}
//当前节点
values.add(value);
//右节点遍历
if (RightNode != null){
values.addAll(RightNode.values());
}
return values;
}
public static void main(String[] args) {
long StartTime = System.currentTimeMillis();
int num[] = new int[40000];
for (int i = 0; i < 40000; i++) {
int number = (int)(Math.random()*5000+1000);
num[i] = number;
}
Node roots = new Node();
for (int number : num){
roots.add(number);
}
System.out.println(roots.values());
long EndTime = System.currentTimeMillis();
System.out.println("二叉树排序法:" + (EndTime - StartTime) + "毫秒");
}
}
*/
通过比较,发现二叉树排序用时最少。