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);
            }
    
        }
    }
  • 相关阅读:
    算法导论2.37答案
    算法导论2.37的算法
    heavy dark读《《暗时间》》
    深入SetOP2函数
    c++标准库都有哪些文件
    c++ sort函数的用法
    深入char转换为int/unsigned int的内部机制分析
    顺序容器之vector
    java的动态代理机制详解
    java.lang.IllegalStateException: Web app root system property already set to different value
  • 原文地址:https://www.cnblogs.com/huangcongcong/p/4005749.html
Copyright © 2011-2022 走看看