您的位置:首页 > 其它

【转】几种基本的排序算法演示

2009-09-15 13:20 405 查看
 package sort;
import java.sql.Timestamp;
import java.util.Arrays;
import java.util.Random;

public class Sort {
    static int NUM=100000;
    static long start;//开始时间
    static long end;//结束时间
    public static void main(String[] args) {
        //生成3个相同的数组,同一情况下比较
        Random random=new Random();
        int[]a1=new int[NUM];
        int[]a2=new int[NUM];
        int[]a3=new int[NUM];
        int[]a4=new int[NUM];
        for(int i=0;i<NUM;i++){
            a1[i]=random.nextInt(NUM);
            a2[i]=a3[3]=a4[i]=a1[i];
        }
   
//        int[]a2=Arrays.copyOf(a1, NUM);
//        int[]a3=Arrays.copyOf(a1, NUM);
//        int[]a4=Arrays.copyOf(a1, NUM);
       
        //排序算法比较,开始了...
        start=System.currentTimeMillis();
        System.out.println("冒泡排序开始时间:"+new Timestamp(start));
        mpSort(a1);
        end=System.currentTimeMillis();
        System.out.println("冒泡排序结束时间:"+new Timestamp(end));
        System.out.println("长度为"+NUM+"的数组冒泡排序耗时"+(end-start)+"ms!");
//        for(int i=0;i<a1.length;i++){
//            System.out.print(a1[i]+",");
//        }
        System.out.print("/n"+"---------------"+"/n");
       
        start=System.currentTimeMillis();
        System.out.println("选择排序开始时间:"+new Timestamp(start));
        xzSort(a2);
        end=System.currentTimeMillis();
        System.out.println("选择排序结束时间:"+new Timestamp(end));
        System.out.println("长度为"+NUM+"的数组选择排序耗时"+(end-start)+"ms!");
//        for(int i=0;i<a2.length;i++){
//            System.out.print(a2[i]+",");
//        }
        System.out.print("/n"+"---------------"+"/n");
       
        start=System.currentTimeMillis();
        System.out.println("插入排序开始时间:"+new Timestamp(start));
        crSort(a3);
        end=System.currentTimeMillis();
        System.out.println("插入排序结束时间:"+new Timestamp(end));
        System.out.println("长度为"+NUM+"的数组插入排序耗时"+(end-start)+"ms!");
//        for(int i=0;i<a3.length;i++){
//            System.out.print(a3[i]+",");
//        }
        System.out.print("/n"+"---------------"+"/n");
       
        start=System.currentTimeMillis();
        System.out.println("快速排序开始时间:"+new Timestamp(start));
        quickSort(a4);
        end=System.currentTimeMillis();
        System.out.println("快速排序结束时间:"+new Timestamp(end));
        System.out.println("长度为"+NUM+"的数组快速排序耗时"+(end-start)+"ms!");
//        for(int i=0;i<a4.length;i++){
//            System.out.print(a4[i]+",");
//        }
//        System.out.print("/n/n"+"---------------"+"/n");
    }
   
   
    //冒泡排序mpSort(int[])
    //比较:(n-1)+(n-2)+...+1次,最多交换(n-1)+(n-2)+...+1次
    //第1~n个,第1~n-1个,第1~n-2个...
    public static void mpSort(int[] data) {
        for (int i=0; i<data.length-1; i++) {
            for(int j=0;j<data.length-1-i;j++){
                if(data[j]>data[j+1]){
                    int temp = data[j];
                    data[j] = data[j+1];
                    data[j+1] = temp;    
                } 
            }
        }
    }
   
    //选择排序xzSort(int[])
    //比较(n-1)+(n-2)+...+1次,最多交换(n-1)次
    //第1~n个,第2~n个,第3~n个...
    public static void xzSort(int[] data) {
        for (int i=0; i<data.length-1; i++) {
            int k=i;
            for(int j=i+1;j<data.length;j++){
                if(data[k]>data[j]){
                   k=j;
                }
            }
            int temp=data[i];
            data[i]=data[k];
            data[k]=temp;
        }
    }
   
    //插入排序
    //比较第i趟后,使得前i个有序
    public static void crSort(int[] data) {
        for (int i=0; i<data.length; i++) {
            for (int j=0; j<i; j++) {
                if (data[i]<data[j]) {
                    int temp = data[i];
                    data[i] = data[j];
                    data[j] = temp;
                }
            }
        }
    }
   
    //快速排序qsSort(int[])//采用2分算法
    public static void quickSort(int[] array) {
        quickSort(array, 0, array.length - 1);
    }
    private static void quickSort(int[] array, int low, int high) {
        if (low < high) {
            int p = partition(array, low, high);
            quickSort(array, low, p - 1);
            quickSort(array, p + 1, high);
        }
    }
    private static int partition(int[] array, int low, int high) {
        int s = array[high];
        int i = low - 1;
        for (int j = low; j < high; j++) {
            if (array[j] < s) {
                i++;
                swap(array, i, j);
            }
        }
        swap(array, ++i, high);
        return i;
    }
    private static void swap(int[] array, int i, int j) {
        int temp;
        temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
   
}

 

//结果

冒泡排序开始时间:2009-09-15 13:05:29.057
冒泡排序结束时间:2009-09-15 13:06:22.031
长度为100000的数组冒泡排序耗时52974ms!

---------------
选择排序开始时间:2009-09-15 13:06:22.031
选择排序结束时间:2009-09-15 13:06:53.927
长度为100000的数组选择排序耗时31896ms!

---------------
插入排序开始时间:2009-09-15 13:06:53.927
插入排序结束时间:2009-09-15 13:07:21.827
长度为100000的数组插入排序耗时27900ms!

---------------
快速排序开始时间:2009-09-15 13:07:21.827
快速排序结束时间:2009-09-15 13:07:21.874
长度为100000的数组快速排序耗时47ms!
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 random string class