• 快速排序java代码


    法一:

    //快速排序 通过测试
    public class QuickSortTest2 {
        public static void quickSort(int[] data,int low,int high){   //此处O(logn)
            int index;
            if(low<high) {
             index=partition(data,low,high);
                quickSort(data,low,index-1);         
                quickSort(data,index+1,high);  
            }
        } 
    
        public static int partition(int[] data, int i, int j) { // O(n)
                int k=data[i];
                while(i<j){
                    while(i<j&&data[j]>=k)
                        j--;
                    if(i<j)
                        data[i++]=data[j];
                    while(i<j&&data[i]<=k)
                        i++;
                    if(i<j)
                        data[j--]=data[i];
                }
                data[i]=k;
                return i;    
       } 
    //-----------------------------------------------------------------------------
        public static void main (String args[]){
            int x[]={9,8,7,6,5,4,3,2,1};
            quickSort(x,0,x.length-1);     
            for(int i=0;i<x.length;i++){
                System.out.println(x[i]);
            }
        }
    }

    法二:

    //快速排序 通过测试
    public class QuickSortTest_ali {
         void quickSort(int[] data,int length){   
            if(length<=1) return;
            int start=0;
            int end=length-1;
            int pivot=data[0];
            while(start<end){
                for(;start<end;end--){
                    if(data[end]<pivot){
                        data[start++]=data[end];
                        break;
                    }
                }
                for(;start<end;start++){
                    if(data[start]>pivot){
                        data[end--]=data[start];
                        break;
                    }
                }
            }
            data[start]=pivot;
            quickSort(data,start);
            quickSort(data+start+1,length-start-1); 
        } 
    //-----------------------------------------------------------------------------
        public static void main (String args[]){
            int x[]={9,8,7,6,5,4,3,2,1};
            quickSort(data,0,data.length-1);
            for(int i=0;i<x.length;i++){
                System.out.println(x[i]);
            }
        }
    }

     时间复杂度:最好的情况和平均情况都是nlogn,最坏情况是n^2。

  • 相关阅读:
    Out of hay
    P3028 [USACO10OCT]汽水机Soda Machine
    P3619 魔法
    P2847 [USACO16DEC]Moocast(gold)奶牛广播-金
    P2830 写程序
    c#DateTime与unix时间戳互相转换
    C# UdpClient使用
    udp单播,广播,多播实现(ReceiveFromAsync,SendToAsync)
    udp广播,单播,多播
    C#实现异步阻塞TCP(Send,Receive,Accept,Connect)
  • 原文地址:https://www.cnblogs.com/seven7seven/p/3621226.html
Copyright © 2020-2023  润新知