• 八大排序算法总结


    排序算法总结:

    排序法

     平均时间

    最差情形

    稳定度

    额外空间

    备注

    冒泡

     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);
            }
    
        }
    }
  • 相关阅读:
    python运行错误---TabError: Inconsistent use of tabs and spaces in indentation
    python运行错误------Non-UTF-8 code
    opencv错误(Unhandled expection at at 0x0007EEE...)
    fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突——我的解决方案
    基础术语
    opencv
    图像归一化
    人脸相关数据库
    堆排序
    abp学习(二)
  • 原文地址:https://www.cnblogs.com/huangcongcong/p/4005749.html
Copyright © 2020-2023  润新知