java常见排序算法

来源:互联网 发布:淘宝客服是不是店主 编辑:程序博客网 时间:2024/05/01 03:05
package algorithms;public class ArrayDemo {    public static void main(String[] args) {        int [] arr={18,4,22,2,7,5,3,21,35,51,54};//        int max=getMax(arr);//        arr=sort2(arr);        int start=0;        int end=arr.length-1;        sort3(arr,start,end);        print(arr);    }    public static void print(int [] arr){        for(int i=0;i<arr.length;i++){            System.out.print(arr[i]+" ");        }System.out.println();    }    //获取最大值    public static int getMax(int [] arr){        int max=arr[0];        for(int i=1;i<arr.length;i++){            if(max<arr[i]){                max=arr[i];            }        }        return max;    }    //选择排序    public static int [] sort1(int [] arr){        int len=arr.length;        for(int i=0;i<len-1;i++){            for(int j=i+1;j<len;j++){                if(arr[i]>arr[j]){                    int tmp=arr[i];                    arr[i]=arr[j];                    arr[j]=tmp;                }            }        }        return arr;    }    //冒泡排序    public static int [] sort2(int [] arr){        int len=arr.length;        for(int i=0;i<len-1;i++){            for(int j=0;j<len-i-1;j++){                //arr[i]和arr[i+1]比较                if(arr[i]>arr[i+1]){                    int tmp=arr[i];                    arr[i]=arr[i+1];                    arr[i+1]=tmp;                }            }        }        return arr;    }    //快速排序    public static void sort3(int[] a,int low,int high){        int start = low;        int end = high;        int key = a[low];        while(end>start){            //从后往前比较            while(end>start&&a[end]>=key)  //如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较                end--;            if(a[end]<=key){                int temp = a[end];                a[end] = a[start];                a[start] = temp;            }            //从前往后比较            while(end>start&&a[start]<=key)//如果没有比关键值大的,比较下一个,直到有比关键值大的交换位置               start++;            if(a[start]>=key){                int temp = a[start];                a[start] = a[end];                a[end] = temp;            }        //此时第一次循环比较结束,关键值的位置已经确定了。左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用        }        //递归        if(start>low) sort3(a,low,start-1);//左边序列。第一个索引位置到关键值索引-1        if(end<high) sort3(a,end+1,high);//右边序列。从关键值索引+1到最后一个    }}

0 0
原创粉丝点击