zoukankan      html  css  js  c++  java
  • 几种简单的排序总结

    几种简单排序算法总结

    冒泡排序

        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);
            }
        }

    算法复杂度比较

  • 相关阅读:
    eclipse下c/cpp " undefined reference to " or "launch failed binary not found"问题
    blockdev 设置文件预读大小
    宝宝语录
    CentOS修改主机名(hostname)
    subprocess报No such file or directory
    用ldap方式访问AD域的的错误解释
    英特尔的VTd技术是什么?
    This virtual machine requires the VMware keyboard support driver which is not installed
    Linux内核的文件预读详细详解
    UNP总结 Chapter 26~29 线程、IP选项、原始套接字、数据链路访问
  • 原文地址:https://www.cnblogs.com/liuyupen/p/10840251.html
Copyright © 2011-2022 走看看