zoukankan      html  css  js  c++  java
  • 八大排序算法总结

    排序算法总结:

    排序法

     平均时间

    最差情形

    稳定度

    额外空间

    备注

    冒泡

     O(n2)

      O(n2)

     稳定

    O(1)

    n小时较好

    交换

      O(n2)

      O(n2)

    不稳定

    O(1)

    n小时较好

    选择

     O(n2)

     O(n2)

    不稳定

    O(1)

    n小时较好

    插入

     O(n2)

     O(n2)

    稳定

    O(1)

    大部分已排序时较好

    基数

    O(logRB)

    O(logRB)

    稳定

    O(n)

    B是真数(0-9),

    R是基数(个十百)

    Shell

    O(nlogn)

    O(ns) 1<s<2

    不稳定

    O(1)

    s是所选分组

    快速

    O(nlogn)

    O(n2)

    不稳定

    O(nlogn)

    n大时较好

    归并

    O(nlogn)

    O(nlogn)

    稳定

    O(1)

    n大时较好

    O(nlogn)

    O(nlogn)

    不稳定

    O(1)

    n大时较好

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    插入排序

    java实现:

    package sort;
    
    public class InsertSort {
        
        public static void main(String[] args) {
            
            int[] arr={70,80,31,37,10,1,48,60,33,80};
            insertSort(arr);
            
            for(int each:arr)
                System.out.print(each+" ");
        }
        
        
        public static void insertSort(int[] arr)
        {
            
            int len=arr.length;
            
            for(int i=1; i<len; i++)
            {
                for(int j=0; j<i; j++)
                {
                    if(arr[i]<arr[j])
                    {
                        int temp=arr[i];
                        for(int k=i; k>j; k--)
                            arr[k]=arr[k-1];
                        arr[j]=temp;
                        break;
                    }
                }
            }
        }
    }

    c++实现

    #include<iostream>
    using namespace std;
    
    void insertSort(int a[],int len);
    
    int main()
    {
        int a[]={70,80,31,37,10,1,48,60,33,80};
        int len=sizeof(a)/sizeof(int);
    
        insertSort(a,len);
    
        for(int i=0; i<len; i++)
            cout<<a[i]<<" ";
    }
    
    
    void insertSort(int a[],int len)
    {
        int i,j;
        
        for(i=1; i<len; i++)
        {
            for(j=0; j<i; j++)
            {
                if(a[i]<a[j])
                {
                    int k,temp=a[i];
                    for(k=i; k>j; k--)
                        a[k]=a[k-1];
                    a[k]=temp;
                }
            }
        }
    }

     

     

    选择排序

    java实现

    package sort;
    
    public class SelectSort {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            int[] arr={70,80,31,37,10,1,48,60,33,80};
            
            selectSort(arr);
            
            for(int i=0; i<arr.length; i++)
                System.out.print(arr[i]+" ");
            
        }
        
        public static void selectSort(int[] arr){
            
            int i,j;
            int min,temp;
            
            for(i=0; i<arr.length; i++)
            {
                min=i;
                for(j=i; j<arr.length; j++)
                {
                    if(arr[j]<arr[min])
                    {
                        min=j;
                    }
                }
                if(min!=i)
                {
                    temp=arr[i];
                    arr[i]=arr[min];
                    arr[min]=temp;
                }
            }
        }
    }

     

    c++实现

    #include<iostream>
    using namespace std;
    
    void insertSort(int a[],int len);
    
    int main()
    {
        int a[]={70,80,31,37,10,1,48,60,33,80};
        int len=sizeof(a)/sizeof(int);
    
        insertSort(a,len);
    
        for(int i=0; i<len; i++)
            cout<<a[i]<<" ";
    }
    
    
    void insertSort(int a[],int len)
    {
        int i,j;
        
        for(i=1; i<len; i++)
        {
            for(j=0; j<i; j++)
            {
                if(a[i]<a[j])
                {
                    int k,temp=a[i];
                    for(k=i; k>j; k--)
                        a[k]=a[k-1];
                    a[k]=temp;
                }
            }
        }
    }

     

     

    冒泡排序

    java实现

    package sort;
    
    public class BubbleSort {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
    
            int[] arr={70,80,31,37,10,1,48,60,33,80};
            
            bubbleSort(arr);
            
            for(int i=0; i<arr.length; i++)
                System.out.print(arr[i]+" ");
        }
    
        private static void bubbleSort(int[] arr) {
            // TODO Auto-generated method stub
            
            int i,j;
            int temp;
            
            for(i=arr.length-1; i>0; i--)
            {
                for(j=0; j<i; j++)
                {
                    if(arr[j]>arr[j+1])
                    {
                        temp=arr[j];
                        arr[j]=arr[j+1];
                        arr[j+1]=temp;
                    }
                }
            }
        }
    
    }

    c++实现

    #include<iostream>
    using namespace std;
    
    void bubbleSort(int a[],int len);
    
    int main()
    {
        int a[]={70,80,31,37,10,1,48,60,33,80};
        int len=sizeof(a)/sizeof(int);
    
        bubbleSort(a,len);
    
        for(int i=0; i<len; i++)
            cout<<a[i]<<" ";
    }
    
    void bubbleSort(int a[],int len)
    {
        int i,j;
        int temp;
        for(i=len-1; i>0; i--)
        {
            for(j=0; j<i; j++)
            {
                if(a[j]>a[j+1])
                {
                    temp=a[j+1];
                    a[j+1]=a[j];
                    a[j]=temp;
                }
            }
        }
    }

     

     

    交换排序

    java实现

    package sort;
    
    public class SwapSort {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            int[] arr={70,80,31,37,10,1,48,60,33,80};
            
            swaptSort(arr);
            
            for(int i=0; i<arr.length; i++)
                System.out.print(arr[i]+" ");
        }
    
        private static void swaptSort(int[] arr) {
            // TODO Auto-generated method stub
            
            int i,j;
            int temp;
            
            for(i=1; i<arr.length; i++)
            {
                for(j=0; j<i; j++)
                {
                    if(arr[i]<arr[j])
                    {
                        temp=arr[i];
                        arr[i]=arr[j];
                        arr[j]=temp;
                    }
                }
            }
        }
    
    }

     

     

     

    快速排序

    java实现

    package sort;
    
    public class QuickSort {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            
            int []a={16,7,3,20,17,8};
            
            for(int i=0; i<a.length; i++)
                System.out.print(a[i]+" ");
            
            quickSort(a);
            System.out.println();
            
            for(int i=0; i<a.length; i++)
                System.out.print(a[i]+" ");
        }
        
        public static void quickSort(int a[])
        {
            quickSort(a,0,a.length-1);
        }
        
        public static void quickSort(int a[],int l,int r){
            int i=l,j=r;
            int x=a[i];
            
            while(i<j)
            {
                while(i<j && x<=a[j])
                    j--;
                if(i<j)
                    a[i]=a[j];
                
                while(i<j && x>a[i])
                    i++;
                if(i<j)
                    a[j]=a[i];
            }
            
            if(l<i-1)
                quickSort(a,l,i-1);
            if(i+1<r)
                quickSort(a,i+1,r);
            
            a[i]=x;
        }
    
    }

    c++实现

    #include<iostream>
    using namespace std;
    
    void quickSort(int a[],int len);
    void quickSort(int a[],int l,int r);
    
    int main()
    {
        int a[]={70,80,31,37,10,1,48,60,33,80};
        int len=sizeof(a)/sizeof(int);
    
        quickSort(a,len);
    
        for(int i=0; i<len; i++)
            cout<<a[i]<<" ";
    }
    
    void quickSort(int a[],int len)
    {
        quickSort(a,0,len-1);
    }
    
    void quickSort(int a[],int l,int r)
    {
        int i=l,j=r;
        int x=a[i];
    
        while(i<j)
        {
            while(i<j && x<=a[j])
                j--;
            if(i<j)
                a[i]=a[j];
    
            while(i<j && x>a[i])
                i++;
            if(i<j)
                a[j]=a[i];
        }
    
        if(l<i-1)
            quickSort(a,l,i-1);
        if(i+1<r)
            quickSort(a,i+1,r);
    
        a[i]=x;
    }

     

     

    希尔排序

    java实现

    package sort;
    
    public class ShellSort {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            int[] arr={70,80,31,37,10,1,48,60,33,80};
            
            shellSort(arr);
            
            for(int i=0; i<arr.length; i++)
                System.out.print(arr[i]+" ");
        }
    
        private static void shellSort(int[] arr) {
            // TODO Auto-generated method stub
            
            int i,j,k;
            int gap,temp;
            
            for(gap=arr.length/2; gap>0; gap=gap/2)
            {
                for(i=0; i<gap; i++)
                {
                    for(j=i+gap; j<arr.length; j=j+gap)
                    {
                        if(arr[j]<arr[j-gap])
                        {
                            temp=arr[j];
                            arr[j]=arr[j-gap];
                            arr[j-gap]=temp;
                        }
                    }
                }
            }
        }
    
    }

     

     

     

    归并排序

    java实现

    package sort;
    
    public class MergeSort {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            
            int[] arr={16,7,3,20,17,8};
            
            int[] result=mergeSort(arr);
            
            for(int i=0; i<result.length; i++)
                System.out.print(result[i]+" ");
        }
    
        private static int[] mergeSort(int[] arr) {
            // TODO Auto-generated method stub
            
            if(arr.length==1)
                return arr;
            
            int half=arr.length/2;
            int[] a=new int[half];
            int[] b=new int[arr.length-half];
            
            System.arraycopy(arr, 0, a, 0, half);
            System.arraycopy(arr, half, b, 0, b.length);
            a=mergeSort(a);
            b=mergeSort(b);
            
            return mergeSortSub(a,b);
        }
        
        private static int[] mergeSortSub(int[] a,int[] b){
            
            int[] result=new int[a.length+b.length];
            int i=0,j=0,k=0;
            
            while(i<a.length && j<b.length)
            {
                if(a[i]<b[j])
                    result[k++]=a[i++];
                else
                    result[k++]=b[j++];
            }
            while(i<a.length)
                result[k++]=a[i++];
            while(j<b.length)
                result[k++]=b[j++];
            
            return result;
        }
    }

     

    堆排序

    package 经典;
    
    public class CheapSort {
        
        public static final int MAX=10;
        
        public static void main(String[] args){
            int []a={16,7,3,20,17,8};
            int len=a.length;
                
            buildHeap(a,len);
            
            for(int i=0; i<len; i++)
                System.out.print(a[i]+",");
            
            sort(a,len);
            System.out.println();
            
            for(int i=0; i<len; i++)
                System.out.print(a[i]+",");
            
        }
        
        public static void sort(int[] a,int size){
            
            int n=size-1;
            
            if(n==0)
                return;
            swap(a,0,n);
            
            adjustHeap(a,0,n);
            
            sort(a,n);
        }
        
        public static void swap(int[] a,int i,int j){
            int temp;
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
        
        public static void buildHeap(int[] a,int size){
            
            for(int i=(size-1)/2; i>=0; i--)
                adjustHeap(a,i,size);
        }
    
        private static void adjustHeap(int[] a, int i, int size) {
            // TODO Auto-generated method stub
        
            int lchild=i*2+1;
            int rchild=i*2+2;
            int max=i;
            
            if(lchild<size && a[lchild]>a[max])
                max=lchild;
            if(rchild<size && a[rchild]>a[max])
                max=rchild;
            if(max!=i)
            {
                swap(a,i,max);
                adjustHeap(a,max,size);
            }
    
        }
    }
  • 相关阅读:
    mysql 复合索引 为什么遵循最左原则
    php设计模式--门面模式
    php设计模式--装饰器模式
    php 设计模式 --组合器模式
    2020暑假训练日记
    2020省选联考翻车记
    题解 洛谷P6560 [SBCOI2020] 时光的流逝
    题解 洛谷P6562 [SBCOI2020] 归家之路
    题解 洛谷P6561 [SBCOI2020] 人
    题解 CF1372E Omkar and Last Floor
  • 原文地址:https://www.cnblogs.com/huangcongcong/p/4005749.html
Copyright © 2011-2022 走看看