几种简单的排序总结

来源:互联网 发布:等到烟火清 知乎 编辑:程序博客网 时间:2024/06/07 12:55

几种简单排序算法总结

冒泡排序

    public static void main(String[] args)    {        int[] a={31,32,4,5,45,65,76,44,65};        output(a);        //共排序n-1趟        for(int i=0;i<a.length-1;i++)//i代表趟数            //每一趟从第一个元素到倒数第二个元素            for(int j=0;j<a.length-1-i;j++)            {                if(a[j]>a[j+1]) //相邻元素比较交换                {                    int temp=a[j];                    a[j]=a[j+1];                    a[j+1]=temp;                }            }            output(a);      }

选择排序

    public static void main(String[] args)    {        int[] a={31,32,4,5,45,65,76,44,65};        output(a);        //共排序n-1趟        for(int i=0;i<a.length-1;i++){//i代表趟数            //每一趟排序找出记录中最大的数放在本趟记录的末位            for(int j=0;j<a.length-i-1;j++)            {            //从第一个元素到倒数大二个元素,每个元素和倒数第一的元素比较并交换                if(a[j]>a[a.length-i-1])                {                    int temp=a[j];                    a[j]=a[a.length-i-1];                    a[a.length-i-1]=temp;                }            }        }output(a);    }

插入排序

    public static void main(String[] args)    {        int[] a={31,32,4,5,45,65,76,44,65};        output(a);        //共排序n-1趟        for(int i=0;i<a.length-1;i++){//i代表趟数            //每一趟排序,将有序表后面的相邻元素插入到有序表中            int key=a[i+1];            for(int j=i;j>=0;j--)            {            //将大于当前插入元素的其他元素右移                if(a[j]>key)                {                    a[j+1]=a[j];                    int temp=a[j];                    a[j]=a[a.length-i-1];                    a[a.length-i-1]=temp;                }            }        }        output(a);    }

快速排序

    public static void main(String[] args)    {        int[] a={31,32,4,5,45,65,76,44,65};        output(a);        quick(a);        output(a);    }    //快速排序:传入排序数组a    public static void quick(int[] a)    {        qsort(a,0,a.length-1);    }    //划分方法:对给定数组a的a[low...high]进行划分,完成后返回中轴元素的下标位置    public static int partition(int[] a,int low,int high)    {        //选出中轴元素        int key=a[low];        //设置首尾指针        int i=low,j=high;        //只要首尾指针不重合        while(i<j)        {        //尾指针不断向左走,直到其指向的元素小于中轴元素            while(a[j]>=key&&i<j)                j--;        //将此元素放到左边首指针位置处。                a[i]=a[j];        //首指针不断向又走右走,直到其指向的元素大于中轴元素                while(a[i]<key&&i<j)                    i++;        //将此元素放置到右边尾指针位置处                a[j]=a[i];        }        //将首尾指针重合后, 将中轴元素放置到此位置            a[i]=key;           //返回中轴元素的下标位置        return i;    }    //快速排序递归方法:给定数组a[low...high]快速排序    public static void qsort(int[] a,int low,int high)    {        if(low<high)        {            //先划分            int mid=partition(a,low,high);            //对左半部分做划分            qsort(a,low,mid-1);            //对右半部分做划分            qsort(a,mid+1,high);        }    }

算法复杂度比较

0 0
原创粉丝点击