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

    算法复杂度比较

  • 相关阅读:
    整理了一份FAQ,新手看一下
    分享:pythonbitstring 3.1.2 发布
    分享:TokuDB v7 发布,并宣布全面开源
    在美国学CS能挣多少钱?美国IT公司标准 offer package详细数字及绿卡政策 | 美国留学申请与就业找工作咨询博客|Warald|一亩三分地论坛
    写的split带改进
    分享:一个多进程并发执行程序ps命令 ls命令
    分享:vi/vim使用进阶: 指随意动,移动如飞 (一)
    waning rm i rm rvfi
    分享:C++中头文件、源文件之间的区别与联系
    分享:神奇的动归状态转移方程——最优子序列
  • 原文地址:https://www.cnblogs.com/liuyupen/p/10840251.html
Copyright © 2011-2022 走看看