`
liu0107613
  • 浏览: 74106 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

java的同样排序函数的执行效率

    博客分类:
  • java
阅读更多

package com.liuxt.sort;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class SortMain {
 
 public static void main(String[] args) throws Exception {
  
  SortUtil sortUtil=new SortUtil();
  while(true)
  {
   System.out.print("please input the length of the Array:");
   BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
   String arrayLength=br.readLine();
   int dataLength=Integer.parseInt(arrayLength);
   sortUtil.dataLength=dataLength;
         int[] a=sortUtil.randomArray();
         System.out.print("please select an sort algorithm:1 select 2 bubble 3 quick,0 quit:");
         String sortSelect=br.readLine();
   int algorithm=Integer.parseInt(sortSelect);
   sortUtil.sortData(algorithm,a);
   if (algorithm==0){
          System.exit(0);
         }   
  }
 }
}

package com.liuxt.sort;

import java.util.Calendar;
import java.util.Random;

import com.liuxt.sort.impl.Bubble;
import com.liuxt.sort.impl.QuickSort;
import com.liuxt.sort.impl.Select;

public class SortUtil {
 
 public  final int SelectSort=1;
 public  final int BubbleSort=2;
 public  final int QuickSort=3;
 public  final int XierSort=4;
 public  int dataLength=0;

 int maxElement = 100000;
 
 //Calendar start_time=Calendar.getInstance();
 Calendar start_time=null;
 Calendar end_time=null;


 
 
 public  int[] randomArray() {
  int[] a = new int[dataLength];
  Random random = new Random();
  for (int i = 0; i < dataLength; i++) {
   a[i] = random.nextInt(maxElement);
  }
  return a;
 } 
 
 private boolean testSort(int[] a){
  
  for(int i=0;i<a.length-1;i++){
   if (a[i]>a[i+1]) return false;
  }
  return true;
 
 }
 
 public void sortData(int algorithm,int[] a){
        if (algorithm==SelectSort){
         DataSort dataSort = new Select();
         start_time=Calendar.getInstance();
         dataSort.sortData(a);
         end_time=Calendar.getInstance();
         long duration=end_time.getTimeInMillis()-start_time.getTimeInMillis();
         System.out.println("duration time:"+(duration));
         System.out.println("elapse time:"+(duration/1000.0)+"s");
         System.out.println("test result:==="+testSort(a));
         
        }
        if (algorithm==BubbleSort){
         DataSort dataSort = new Bubble();
         start_time=Calendar.getInstance();
         dataSort.sortData(a);
         end_time=Calendar.getInstance();
         long duration=end_time.getTimeInMillis()-start_time.getTimeInMillis();
         System.out.println("elapse time:"+(duration/1000.0)+"s");
         System.out.println("test result:==="+testSort(a));
           
        }
        if (algorithm==QuickSort){
         DataSort dataSort = new QuickSort();
         start_time=Calendar.getInstance();
         dataSort.sortData(a);
         end_time=Calendar.getInstance();
         long duration=end_time.getTimeInMillis()-start_time.getTimeInMillis();
         System.out.println("elapse time:"+(duration/1000.0)+"s");
         System.out.println("test result:==="+testSort(a));
        }  
 }
 
 
 
 

}

 

package com.liuxt.sort.impl;

import com.liuxt.sort.DataSort;

public class Bubble implements DataSort {

 public void sortData(int[] data) {

  int i = 0, j = 0, temp = 0;
  boolean exchange;
  for (i = 0; i < data.length; i++) // 设定执行的次数
  {
   exchange = false;// 每趟排序前设定 交换标志
   for (j = 0; j < data.length - i - 1; j++) {
    if (data[j] > data[j + 1]) {
     // 将j和j+1互换
     temp = data[j];
     data[j] = data[j + 1];
     data[j + 1] = temp;
     exchange = true;
    }
   }
   if (!exchange) // 本趟排序未发生交换,提前终止算法
    return;
  } // end for i
 }
}

package com.liuxt.sort.impl;

import com.liuxt.sort.DataSort;

public class Select implements DataSort {

 public void sortData(int[] data) {

  int i, j, temp, min;
  int n = data.length;
  for (i = 0; i < n - 1; i++) {
   min = i;
   for (j = i + 1; j < n; j++) {
    if (data[j] < data[min]) {
     min = j;
     // temp=data[i];data[i]=data[j];data[j]=temp;
    }
   }
   temp = data[i];
   data[i] = data[min];
   data[min] = temp;
  }

 }

}

package com.liuxt.sort.impl;

import com.liuxt.sort.DataSort;

public class QuickSort implements DataSort {

 public void sortData(int[] data) {
  try {
    quickSort3(data, 0, data.length - 1);

  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
 void quickSort3(int data[],int low,int high){
  int i,j,privokey;
  if (low<high){
   privokey=data[low];i=low;j=high;
   while(i<j) {
    while(i<j&&data[j]>=privokey) j--;
    if (i<j) data[i++]=data[j];
    while(i<j&&data[i]<=privokey) i++;
    if(i<j) data[j--]=data[i];
   }
   data[i]=privokey;
   quickSort3(data,low,i-1);
   quickSort3(data,i+1,high);
  }
 }

}

run.bat

echo off
set java_home=C:\Program Files\Java\jdk1.5.0_14
set classpath="%java_home%/lib/dt.jar;%java_home%/lib/tool.jar;."

java -cp %classpath% com/liuxt/sort/SortMain

执行结果:

please input the length of the Array:50000
please select an sort algorithm:1 select 2 bubble 3 quick,0 quit:1
duration time:6984
elapse time:6.984s
test result:===true
please input the length of the Array:50000
please select an sort algorithm:1 select 2 bubble 3 quick,0 quit:2
elapse time:16.469s
test result:===true
please input the length of the Array:50000
please select an sort algorithm:1 select 2 bubble 3 quick,0 quit:3
elapse time:0.016s
test result:===true

分享到:
评论

相关推荐

    简单的快速排序

    在这个实现中,`quickSort`方法是主排序函数,它接受一个整型数组和两个索引,分别表示数组的起始和结束位置。`partition`方法负责将数组分为两部分,并返回基准元素的新位置。`main`方法展示了如何调用快速排序并...

    java 实现的排序

    在Java中,快速排序的实现涉及递归,通过`partition`函数将数组划分为两部分,并对左右子数组分别调用自身。快速排序的平均时间复杂度为O(n log n),但在最坏情况下(数组已经排序或接近排序)为O(n^2)。 5. **折半...

    Java排序适合新手,欢迎下载

    此外,还使用了`System.out.print`和`System.out.println`函数来打印排序后的结果,以及使用`Date`类和`getTime()`方法来计算排序所花费的时间,这有助于对比不同算法的执行效率。 通过对比冒泡排序、选择排序和...

    排序算法c&java描述

    5. 归并排序:同样基于分治,将数组不断分割成小数组,然后合并这些小数组以得到排序结果。C和Java中,都需要使用递归,并需要额外的内存空间来存储临时结果。 6. 堆排序:通过构建最大(或最小)堆来实现排序,堆...

    Java常用词汇(java英语)

    28. **Job Scheduling**(工程安排):调度任务执行,Java中可使用优先队列或调度器实现。 29. **Satisfiability**(可满足性):逻辑问题,确定是否存在一组赋值使布尔表达式为真,Java中的SAT求解器可用于解决...

    java线程应用——排序过程动态显示

    - `Runnable`接口:实现`Runnable`接口,然后将其实例传递给`Thread`的构造函数,同样通过`start()`启动。 2. **线程同步与通信**: - `synchronized`关键字:用于线程间的同步,防止多个线程同时访问共享资源。 ...

    Java 疑难杂症_笔记.pdf

    - 多核处理器支持真正的并行执行,能够同时运行多个线程或进程,提高程序执行效率。 #### 用户线程和内核线程 - **用户线程**由应用程序管理,无需操作系统介入。 - **内核线程**由操作系统调度,性能开销较大。 ...

    java jdk 1.8 版本

    6. **Nashorn JavaScript引擎**:Java 8包含了Nashorn JavaScript引擎,允许Java应用直接执行JavaScript代码,并与Java对象无缝交互,促进了Java和JavaScript的集成。 7. **Optional类**:`Optional&lt;T&gt;`类是一个...

    Java常见算法大全

    - 归并排序:同样采用分治策略,将数组递归地分成两半,分别排序,然后合并。 - 堆排序:利用堆数据结构实现的排序方法,可以原地排序。 2. **查找算法**: - 线性查找:逐个检查元素直到找到目标值。 - 二分...

    java多线程编程

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中实现多线程有两种主要方式:通过继承`Thread`类或者实现`Runnable`接口。下面我们将深入探讨这两...

    JAVA多线程编程详解-详细操作例子

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,实现多线程有两种主要方式:通过继承`Thread`类或者实现`Runnable`接口。 1. **继承Thread类*...

    java数据结构和算法.

    算法在Java编程中同样重要,包括排序算法(如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序)、搜索算法(如深度优先搜索、广度优先搜索)、图算法(如Dijkstra最短路径算法、Floyd-Warshall所有对最短...

    JAVA基础知识问答大全

    - **Collections**:这是一个工具类,也位于`java.util`包中,它包含了一系列静态方法,用于操作集合类的实例,如排序、查找和填充等。 #### 7. assert 的使用场景 `assert`关键字用于添加断言,这是一种编程技术...

    常见排序算法

    在Java中,需要一个循环来改变间隔,以及一个嵌套的循环来执行插入排序。 8. **计数排序(Counting Sort)** 计数排序是一种非基于比较的排序算法,适用于待排序数据范围不大的情况。它统计每个元素出现的次数,然后...

    归并排序单步演示软件

    接着,对左右两个子数组分别进行同样的归并排序操作。这个过程中,子数组可能会继续分解,直到每个子数组只包含一个元素,因为一个元素自然就是有序的。 在排序阶段,软件可能使用递归的方式来实现归并排序。每次...

    变态JAVA面试32问及答案

    同样地,变量或方法如果被声明为`final`,则该变量或方法的值/行为在整个程序执行过程中不可改变。例如,`final int num = 10;`声明后,`num`的值将永远固定为10,无法再改变。 - **finally**:此关键字用于异常...

    java课程设计大作业demo

    首先,基础语法是Java学习的起点,包括变量声明、数据类型(如基本类型和引用类型)、流程控制(if语句、switch语句、for循环、while循环等)和函数定义。这些内容构成了程序的基本骨架,是编写任何Java程序的基础。...

    JAVA语言程序设计课后习题

    多线程程序能够同时执行多个任务,提高程序的效率和响应速度。实现时,可能会定义多个线程,每个线程执行不同的任务,如数据处理、网络通信等。 #### 十、数据文件应用程序 这类程序通常涉及文件的读写操作,如...

Global site tag (gtag.js) - Google Analytics