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);
            }
    
        }
    }
  • 相关阅读:
    菜鸟的it之路-起航
    实验报告四
    实验报告三
    实验报告二
    实验报告一
    远程连接
    操作系统安装
    服务器硬件组成
    linux系统下排查cpu过高原因
    windows系统下排查Java项目cpu过高原因
  • 原文地址:https://www.cnblogs.com/huangcongcong/p/4005749.html
Copyright © 2011-2022 走看看